Kubernetes:基于jenkins的CI/CD(二)

Posted by zhangshun on November 14, 2019
一、 增加回滚功能

之前一篇文章介绍了在kubernetes中进行简单的CICD,但是没有回滚的功能,下面增加下回滚的功能

之前文章是在构建中的时候选择部署的环境,这次我们在构建前选择部署环境

创建一个pipeline风格的任务,在构建时选择参数化构建过程,这样我们就可以给任务传递一些参数

构建前需要输入的参数:

可以根据git commitID跟时间戳来选择回滚的版本

pipeline声明式参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
node('jenkins_slave') {		\\表明要执行的node

  if (env.Action == "Deploy") {		\\Action选择Deploy时执行下面
    stage('Clone') {
      echo "1.Clone Stage"
      git credentialsId: 'gitlab-ssh-secret', url: 'git@gitlab.xxxxxx.cn:zhangshun/xxxxxx.git'
      script {
        build_tag = sh(script: "git rev-parse --short HEAD", returnStdout: true).trim()		\\全局变量,把git commitID 作为镜像的tag,方便查看跟回滚
        date = sh(script: "date +%Y-%m-%d-%H:%M:%S", returnStdout: true).trim()		\\全局变量,方便查看跟回滚
      }      
    }
    stage('Build Image') {
      echo "2.Build Stage"
      sh "docker login --username=admin --password=xxxxxx 192.168.0.109"
      sh "docker build -t 192.168.0.109/zzc_raptor/raptor:${build_tag} ."
    }
    stage('Push Image') {
      echo "3.Push Stage"
      sh "docker login --username=admin --password=xxxxxx 192.168.0.109"
      sh "docker push 192.168.0.109/zzc_raptor/raptor:${build_tag}"
    }
    stage('Deploy Yaml') {
      echo "4. Yaml Stage"
      echo "This is a deploy step to \${Env}"
      sh "sed -i 's/<BUILD_TAG>/${build_tag}/g' Raptor_Deployment.yaml"		\\替换镜像的tag
      if (env.Env == "qa") {	\\选择部署的环境
        sh "sed -i 's/<env>/qa/g' Raptor_Deployment.yaml"
      } else if (env.Env == "int"){
        sh "sed -i 's/<env>/int/g' Raptor_Deployment.yaml"
      } else {
        sh "sed -i 's/<env>/prod/g' Raptor_Deployment.yaml"
      }
      sh "cp Raptor_Deployment.yaml Raptor_Deployment_\${Env}_${build_tag}_${date}.yaml"	\\重命名yaml文件,方便以后回滚
      sh "kubectl apply -f Raptor_Deployment_\${Env}_${build_tag}_${date}.yaml --record"
    }
  }

  if (env.Action == "RollBackup") {		\\Action选择Rollbackup时执行下面
    stage('RollBackup') {
        sh "kubectl rollout undo deployment raptor -n \${Env} --to-revision `kubectl rollout history deployment raptor -n \${Env}|grep \${RollBackupName}|awk '{print \$1}'`"
    }
  }
}
二、步骤优化

1、git认证
优化前:使用的是https://GitlabUser:GitlabPassword@gitlab.intellicredit.cn/zhangshun/kubernetes-jenkins-test.git拉取代码,将用户名跟密码放到url中了,非常不安全
优化后:在jenkins中创建凭证,采用ssh登陆方式拉取代码
创建凭证: 构建流水线语法:让你可以轻松写出Groovy,而不需要会Groovy