局域网环境搭建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)集成