jenkins共享ci阶段
需求
一个产品包含多个服务,这些服务的流水线都是类似的:制作制品+构建并推送镜像+构建并推送chart包+触发自动部署。我们期望将流水线拆分为ci流水线、cd流水线,ci流水线包含:制作制品+构建并推送镜像+构建并推送chart包,cd流水线包含:触发自动部署,ci流水线公用的只有一条,每个服务都有一条cd流水线。当构建cd流水线时先触发ci流水线,ci流水线执行完成后继续执行cd流水线各阶段
Pipeline项目实现共享ci阶段
创建ci流水线项目
- 点击【New Item】选择Pipeline,填写项目名称
- 将ci流水线项目配置成参数构建项目,配置需要的参数,以供构建时传递参数到执行流水线,根据不同服务的信息生成对应服务制品
- 配置通过调用url触发构建,输入框中的值为url触发时需要传递的token参数值。此ci流水线除可以供cd流水线触发,还可以通过代码调用url触发生成制品
- 根据需要编写Pipeline脚本。点击这里查看pipeline文档
//所有的脚本命令都放在pipeline中
pipeline {
//指定任务在哪个集群节点中执行
agent any
stages {
stage('打印参数及全局变量') {
steps {
sh 'echo ${gitUrl}; sleep 20'
sh 'echo ${BUILD_ID} - ${BUILD_NUMBER}'
}
}
stage('生成源码存储目录') {
steps {
echo '此ci阶段为产品下所有服务公用,因此需要将代码放置到根据uuid动态生成的目录'
}
}
stage('拉取gitlab仓库代码') {
steps {
echo '拉取代码到上部创建目录中'
}
}
stage('通过maven编译打包') {
steps {
sh '/u01/app/maven/bin/mvn clean package'
}
}
stage('生成并推送镜像') {
steps {
echo '生成并推送镜像'
}
}
stage('生成并推送chart包') {
steps {
echo '生成并推送chart包'
}
}
}
post {
always {
echo '清理目录'
}
}
}
测试ci流水线项目
通过页面构建测试ci流水线
- 点击【Build with Parameters】填写参数值,点击【Build】构建ci流水线
通过url远程构建ci流水线
- 使用postman配置GET请求,并配置好认证信息。token即上面ci流水线配置远程构建设置的token值
http://172.0.0.1:8200/view/hsops.cd28e65c-59e3-46fc-afd3-8002ab0b2128.devops-launch9/job/hskp-devops-service-p/buildWithParameters?token=12345&gitUrl=http://172.0.0.1:8181/hskp-devops-launch5/hand-hzero-gateway.git
创建cd流水线项目
每条cd流水线对应一个产品服务
- 点击【New Item】选择Pipeline,填写项目名称
- 将cd流水线项目配置成参数构建项目,配置需要的参数,以供构建时传递参数到执行流水线,这里需要配置的参数包含ci流水线需要的参数
- 根据需要编写Pipeline脚本。此脚本首先触发ci流水线项目构建,完成之后再触发部署
//所有的脚本命令都放在pipeline中
pipeline {
//指定任务在哪个集群节点中执行
agent any
stages {
stage('ci') {
steps {
build job: 'hskp-devops-service-p', wait: true,
parameters:[string(name: 'gitUrl', value: 'http://172.23.16.219:8182/hskp-devops-launch5/hand-hzero-gateway.git')]
}
}
stage('部署') {
steps {
echo '执行部署'
}
}
}
}