文章目录
Jenkins流水线任务介绍
之前采用Jenkins的自由风格构建的项目,每个步骤流程都要通过不同的方式设置,并且构建过程中整体流程是不可见的,无法确认每个流程花费的时间,并且问题不方便定位问题。
Jenkins的Pipeline可以让项目的发布整体流程可视化,明确执行的阶段,可以快速的定位问题。并且整个项目的生命周期可以通过一个Jenkinsfile文件管理,而且Jenkinsfile文件是可以放在项目中维护。
所以Pipeline相对自由风格或者其他的项目风格更容易操作。
Jenkins流水线任务
构建Jenkins流水线任务
- 构建Jenkins流水线任务
- 生成Groovy脚本
- 构建后查看视图
Groovy脚本
-
Groovy脚本基础语法
// 所有脚本命令包含在pipeline{}中
pipeline {
// 指定任务在哪个节点执行(Jenkins支持分布式)
agent any// 配置全局环境,指定变量名=变量值信息 environment{ host = '192.168.11.11' } // 存放所有任务的合集 stages { // 单个任务 stage('任务1') { // 实现任务的具体流程 steps { echo 'do something' } } // 单个任务 stage('任务2') { // 实现任务的具体流程 steps { echo 'do something' } } // ...... }
}
-
编写例子测试
pipeline {
agent any// 存放所有任务的合集 stages { stage('拉取Git代码') { steps { echo '拉取Git代码' } } stage('检测代码质量') { steps { echo '检测代码质量' } } stage('构建代码') { steps { echo '构建代码' } } stage('制作自定义镜像并发布Harbor') { steps { echo '制作自定义镜像并发布Harbor' } } stage('基于Harbor部署工程') { steps { echo '基于Harbor部署工程' } } }
}
- 查看效果
Ps:涉及到特定脚本,Jenkins给予了充足的提示,可以自动生成命令
Jenkinsfile实现
Jenkinsfile方式需要将脚本内容编写到项目中的Jenkinsfile文件中,每次构建会自动拉取项目并且获取项目中Jenkinsfile文件对项目进行构建
- 配置pipeline
- 准备Jenkinsfile
- 测试效果
Jenkins流水线任务实现
参数化构建
添加参数化构建,方便选择不的项目版本
拉取Git代码
通过流水线语法生成Checkout代码的脚本
将*/master更改为标签${tag}
pipeline {
agent any
stages {
stage('拉取Git代码') {
steps {
checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: 'gitee', url: 'https://gitee.com/qfxcoffee/shield.git']])
}
}
}
}
构建代码
pipeline {
agent any
stages {
stage('拉取Git代码') {
steps {
checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: 'gitee', url: 'https://gitee.com/qfxcoffee/shield.git']])
}
}
stage('构建代码') {
steps {
sh 'cd arthas-study && /var/jenkins_home/maven/bin/mvn clean package -DskipTests'
}
}
}
}
制作自定义镜像并发布
pipeline {
agent any
environment{
harborHost = '192.168.56.112:80'
harborRepo = 'repository'
harborUser = 'admin'
harborPasswd = 'Harbor12345'
}
stages {
stage('拉取Git代码') {
steps {
checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: 'gitee', url: 'https://gitee.com/qfxcoffee/shield.git']])
}
}
stage('构建代码') {
steps {
sh 'cd arthas-study && /var/jenkins_home/maven/bin/mvn clean package -DskipTests'
}
}
stage('制作自定义镜像并发布Harbor') {
steps {
sh '''cd arthas-study/docker
mv ../target/arthas-study.jar ./arthas-study.jar
docker build -t ${JOB_NAME}:${tag} ./'''
sh '''docker login -u ${harborUser} -p ${harborPasswd} ${harborHost}
docker tag ${JOB_NAME}:${tag} ${harborHost}/${harborRepo}/${JOB_NAME}:${tag}
docker push ${harborHost}/${harborRepo}/${JOB_NAME}:${tag}'''
}
}
}
}
-
生成Publish Over SSH脚本
pipeline {
agent any
environment{
harborHost = '192.168.56.112:80'
harborRepo = 'repository'
harborUser = 'admin'
harborPasswd = 'Harbor12345'
port = 8080
host_port = 8888
}
stages {stage('拉取Git代码') { steps { checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: 'gitee', url: 'https://gitee.com/qfxcoffee/shield.git']]) } } stage('构建代码') { steps { sh 'cd arthas-study && /var/jenkins_home/maven/bin/mvn clean package -DskipTests' } } stage('制作自定义镜像并发布Harbor') { steps { sh '''cd arthas-study/docker mv ../target/arthas-study.jar ./arthas-study.jar docker build -t ${JOB_NAME}:${tag} ./''' sh '''docker login -u ${harborUser} -p ${harborPasswd} ${harborHost} docker tag ${JOB_NAME}:${tag} ${harborHost}/${harborRepo}/${JOB_NAME}:${tag} docker push ${harborHost}/${harborRepo}/${JOB_NAME}:${tag}''' } } stage('目标服务器拉取镜像并运行') { steps { sshPublisher(publishers: [sshPublisherDesc(configName: 'testEnv', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/usr/bin/deploy.sh $harborHost $harborRepo $JOB_NAME $tag $port $host_port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)]) } } }
}