局域网环境搭建Jenkins

一、准备安装包

因为服务器不能连接外网,所以不能使用yum下载安装

下载好jenkins并上传到服务器

安装包 https://jenkins.io/zh/download/
文档 https://jenkins.io/zh/doc/book/installing/

二、安装Jenkins

[root@oahzero]# rpm -ih jenkins-2.222.4-1.1.noarch.rpm

安装成功之后,一些主要文件目录:
/usr/lib/jenkins/jenkins.war
/etc/sysconfig/jenkins 配置文件
/var/log/jenkins/jenkins.log 日志文件

三、修改配置文件并启动

配置大于编码 要养成查看配置文件的习惯

[root@oahzero]# vim /etc/sysconfig/jenkins
[root@oahzero]# vim /etc/rc.d/init.d/jenkins
candidates="
/usr/java/jdk1.8.0_161/bin/java
/usr/java/jdk1.8.0_161/jre/bin/java

启动Jenkins

[root@oahzero]# systemctl restart jenkins

查看状态

[root@oahzero]# systemctl status -l jenkins.service

在这里插入图片描述
daemon-reload

[root@oahzero]# systemctl daemon-reload

重启Jenkins

[root@oahzero]# systemctl restart jenkins

开机自启动

[root@oahzero]# systemctl enable jenkins

防火墙开放端口

[root@oahzero]# firewall-cmd --permanent --add-port=8088/tcp
[root@oahzero]# firewall-cmd --reload

四、Jenkins初始化

http://ip:port 访问Jenkins
首次访问输入秘钥
首次访问需要密码

[root@oahzero]# cat /var/lib/jenkins/secrets/initialAdminPassword

之后进行一下初始化配置和插件安装,就可以正常使用了

五、Jenkins系统管理

全局工具配置

在这里插入图片描述

Maven 配置

在这里插入图片描述

JDK

在这里插入图片描述

Maven

在这里插入图片描述

系统配置

在这里插入图片描述

Maven项目配置

在这里插入图片描述

Publish over SSH

在这里插入图片描述
通过配置SSH连接到目标服务器部署服务

Managed files

在这里插入图片描述
各个微服务yml配置文件
可以通过profile来区分各个环境的配置

新建任务

在这里插入图片描述

新建Install任务

选用自由风格的软件项目

General

  • 不允许并发构建
  • 丢弃旧的构建 (Log Rotation)
  • 参数化构建过程在这里插入图片描述

构建触发器

高级项目选项

流水线

在这里插入图片描述


def printERROR(def message) {
    print("\033[41m[ERROR]\033[0m \033[31m${message}\033[0m")
}

def printINFO(def message) {
    print("\033[42m[INFO]\033[0m \033[32m${message}\033[0m")
}

def printWARN(def message) {
    print("\033[43m[WARN]\033[0m \033[33m${message}\033[0m")
}

ansiColor('xterm') {
    node {
        stage("check out code from gitlab") {
            checkout([$class: 'GitSCM', branches: [[name: "${gitlab_branch}"]], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'sourcecode']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'fcc6e2ee-c699-4ee0-b5b0-be9af70eb506', url: "${gitlab_url}"]]])
        }
        stage('maven copy jar') {
            def app_profiles = null
            switch ("${gitlab_branch}") {
                case 'origin/develop':
                    app_profiles = 'dat'
                    break;
                case 'origin/dat-nacos':
                    app_profiles = 'dat'
                    break;
                case 'origin/sit':
                    app_profiles = 'sit'
                    break;
                case 'origin/uat':
                    app_profiles = 'uat'
                    break;
                case 'origin/release':
                    app_profiles = 'stg'
                    break;
                case 'origin/master':
                    app_profiles = 'master'
                    break;
                case 'origin/master_special':
                    app_profiles = 'master'
                    break;
                default:
                    app_profiles = 'dat'
                    break;
            }
            if (app_profiles != null) {
                withMaven(globalMavenSettingsConfig: 'globalMavenSettingsConfig', jdk: 'jdk1.8.0_144', maven: 'apache-maven-3.5.2', mavenSettingsConfig: 'mavenSettingsConfig') {
                    sh "cd sourcecode;mvn clean install deploy -Dmaven.test.skip=true -P ${app_profiles},abc -am"
                }
                def pomXML = null
                if (fileExists("${WORKSPACE}/sourcecode/.flattened-pom.xml")) {
                    pomXML = readMavenPom file: "${WORKSPACE}/sourcecode/.flattened-pom.xml"
                } else {
                    pomXML = readMavenPom file: "${WORKSPACE}/sourcecode/pom.xml"
                }
                printINFO("当前编译分支:${gitlab_branch}");
                printINFO("当前版本号:${pomXML.getVersion()}");
            } else {
                printERROR('请勿构建除develop、sit、uat、release、master以外的其他分支')
                unstable 'zkrzhangqiang1@abchinalife.cn'
            }
        }
    }
}

新建发布任务

General

  • 丢弃旧的构建 (Log Rotation)
  • 参数化构建过程
    字符参数:版本号(appVersion)
    Persistent String Parameter:部署目标服务器(appIP )
    Persistent String Parameter:指定配置环境(ymlProfiles)
    Persistent String Parameter:服务名(jar、yml)(artifactId)

构建触发器

高级项目选项

流水线

在这里插入图片描述

ansiColor('xterm') {

	def jdk = "JDK1.8.0_144"
	    maven = 'Maven-3.5.0'
		tomcatParameter = ''
		ymlPort = ''
	node {
	   
		stage('loading files'){
			configFileProvider([configFile(fileId: 'pom.xml', targetLocation: 'pom.xml')]) {
				// 加载 从Nexus 复制 应用jar 所需的pom
			}
			configFileProvider([configFile(fileId: 'startup.sh', targetLocation: 'startup.sh')]) {
				// 加载 启动脚本 
			}
			configFileProvider([configFile(fileId: "${artifactId}", targetLocation: "${artifactId}.yml")]) {
				// 加载 应用配置yml文件 
			}
		}
		stage("get ymlPort"){
		    script {
				//读取 yml文件中 对应环境的端口
                def getPort = sh returnStdout: true ,script: "cat ${artifactId}.yml |grep \"^.*profiles: ${ymlProfiles}\$\" -B2|grep 'port'|awk '{print \$2}'"
                ymlPort = getPort.trim()
                echo "${ymlPort}"
            }
		}
		stage('maven copy jar'){
			withMaven(globalMavenSettingsConfig: 'GlobalSettings', jdk: "${jdk}", maven: "${maven}", mavenSettingsConfig: 'settings') {
				// 执行 maven 
				sh "mvn dependency:copy -Dabc.artifactId=${artifactId} -Dabc.version=${appVersion}"
			}
		}


		stage('upload files to server'){
			sshPublisher(
				publishers: [
					sshPublisherDesc(
						configName: "${appIP}", 
						transfers: [
							sshTransfer(
								excludes: '',
								execCommand: "mkdir -p \$(echo /app/`whoami`/${ymlProfiles});mv ${artifactId}.yml ${artifactId}.jar startup.sh -t /app/`whoami`/${ymlProfiles}/ ;cd /app/`whoami`/${ymlProfiles};echo \"sh startup.sh ${ymlProfiles} ${artifactId} \$(cat /app/`whoami`/${ymlProfiles}/${artifactId}.yml |grep \"^.*profiles: ${ymlProfiles}\$\" -B2|grep 'port'|awk '{print \$2}') ' ${tomcatParameter}'\" > startUP${artifactId}.sh; sh startUP${artifactId}.sh ",
								execTimeout: 120000,
								flatten: false,
								makeEmptyDirs: false,
								noDefaultExcludes: false,
								patternSeparator: '[, ]+',
								remoteDirectory: '',
								remoteDirectorySDF: false,
								removePrefix: '',
								sourceFiles: "${artifactId}.yml,${artifactId}.jar,startup.sh"
							)
						],
						usePromotionTimestamp: false,
						useWorkspaceInPromotion: false,
						verbose: true
					)
				]
			) 
		}  
	}
	
	sleep 60
	
	node{
		stage('check health'){
			httpRequest consoleLogResponseBody: true, responseHandle: 'NONE', timeout: 10, url: "http://${appIP}:${ymlPort}/health", validResponseContent: 'UP'
		}
	}
}

新建自动任务

提交自动部署 push–>install–>deploy
Jenkins与Github(WebHook)/Gitlab(Integrations Settings)集成

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值