使用Jenkins构建流水线
获取长期的docker login命令
在Jenkins安装部署过程中,已经完成了容器中执行docker命令的配置(参见9),故Jenkins对接SWR无需额外配置,可直接执行docker命令。仅需获取长期有效的SWR登录指令,具体步骤请参见获取长期有效docker login指令。
例如本账号的命令为:
docker login -u cn-east-3@xxxxx -p xxxxx swr.cn-east-3.myhuaweicloud.com
创建pipeline完成镜像构建及push
本示例将使用Jenkins构建一条流水线,该流水线的作用是从代码仓中拉取代码并打包成镜像推送到SWR镜像仓库中。
创建pipeline步骤如下:
- 在Jenkins界面单击“New Item”。
- 输入任务名称,并选择创建流水线。
- 配置pipeline脚本,其他步骤不配置。
以下pipeline脚本仅供您参考,您可根据自身业务自定义脚本内容,关于更多关于流水线脚本的语法请参考Pipeline。
示例脚本中的部分参数需要修改:
- git_url:您代码仓库的地址,需要替换为实际取值。
- swr_login:登录命令为获取长期的docker login命令获取的命令。
- swr_region:SWR的区域。
- organization:SWR中的实际组织名称。
- build_name:制作的镜像名称。
- credential:添加到Jenkins的集群凭证,请填写凭证ID。如果需要部署在另一个集群,需要重新将这个集群的访问凭证添加到Jenkins,具体操作请参考设置集群访问凭证。
- apiserver:部署应用集群的APIserver地址,需保证从Jenkins集群可以正常访问该地址。
//定义代码仓地址 def git_url = 'https://github.com/lookforstar/jenkins-demo.git' //定义SWR登录指令 def swr_login = 'docker login -u cn-east-3@xxxxx -p xxxxx swr.cn-east-3.myhuaweicloud.com' //定义SWR区域 def swr_region = 'cn-east-3' //定义需要上传的SWR组织名称 def organization = 'container' //定义镜像名称 def build_name = 'jenkins-demo' //部署集群的证书ID def credential = 'k8s-token' //集群的APIserver地址,需保证从Jenkins集群可以正常访问该地址 def apiserver = 'https://192.168.0.100:6443' pipeline { agent any stages { stage('Clone') { steps{ echo "1.Clone Stage" git url: git_url script { build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim() } } } stage('Test') { steps{ echo "2.Test Stage" } } stage('Build') { steps{ echo "3.Build Docker Image Stage" sh "docker build -t swr.${swr_region}.myhuaweicloud.com/${organization}/${build_name}:${build_tag} ." //${build_tag}表示获取上文中的build_tag变量作为镜像标签,为git rev-parse --short HEAD命令的返回值,即commit ID。 } } stage('Push') { steps{ echo "4.Push Docker Image Stage" sh swr_login sh "docker push swr.${swr_region}.myhuaweicloud.com/${organization}/${build_name}:${build_tag}" } } stage('Deploy') { steps{ echo "5. Deploy Stage" echo "This is a deploy step to test" script { sh "cat k8s.yaml" echo "begin to config kubenetes" try { withKubeConfig([credentialsId: credential, serverUrl: apiserver]) { sh 'kubectl apply -f k8s.yaml' //该YAML文件位于代码仓中,此处仅做示例,请您自行替换 } println "hooray, success" } catch (e) { println "oh no! Deployment failed! " println e } } } } } }
- 保存后执行Jenkins job。