更新时间:2024-05-10 GMT+08:00

使用Jenkins构建流水线

获取长期的docker login命令

在Jenkins安装部署过程中,已经完成了容器中执行docker命令的配置(参见9),故Jenkins对接SWR无需额外配置,可直接执行docker命令。仅需获取长期有效的SWR登录指令,具体步骤请参见获取长期有效docker login指令

例如本账号的命令为:

docker login -u ap-southeast-1@xxxxx -p xxxxx swr.ap-southeast-1.myhuaweicloud.com

创建pipeline完成镜像构建及push

本示例将使用Jenkins构建一条流水线,该流水线的作用是从代码仓中拉取代码并打包成镜像推送到SWR镜像仓库中。

创建pipeline步骤如下:

  1. 在Jenkins界面单击“New Item”
  2. 输入任务名称,并选择创建流水线。

  3. 配置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登录指令//定义SWR区域
    def swr_region = 'ap-southeast-1'
    //定义需要上传的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
                    }
                    }
                }
            }
        }
    }

  4. 保存后执行Jenkins job。