cicd 06--jenkins 常见问题和注意事项

cicd 06--jenkins 常见问题和注意事项

  • 1 介绍
  • 2 常见用法
  • 3 注意事项
  • 4 说明

1 介绍

近期由于工作需要开始尝试做各种各样的jenkins流程,也遇到了各类奇怪的问题,当然包含一些新书会踩到的坑。因此准备写一篇文章专门记录jenkins 中常见的用法和异常,以便于后续查阅和学习,后续也会持续在这里更新相关问题。

2 常见用法

  1. 获取指定格式时间
    获取事件可以使用内置的Data 函数,但是其输出格式有限(方法1);也可以通过sh 执行 date 命令的方式输出多样的日期类型,但是其需要指定agent节点执行(方法2)。
    方法1:
    def createVersion() {
        return new Date().format('yyyyMMdd-HHmmss')
    }
    image_version = createVersion()
    
    方法2:
    def createVersion() {
        node("SRE-Build01-Server") {
            ts = sh(returnStdout: true, script: "date +%y.%U.%y%m%d%k%M").trim()
            return ts
        }
    }
    image_version = createVersion()
    

3 注意事项

  1. 多个delete_dir需要放置到具体位置
    本案例在一个job 中使用了两个目录,如果 deleteDir() 放在 dir() 的外层,那么会导致clone前端后,在clone后端的时候也把前端文件删除,因此需要将 deleteDir() 放在 dir() 的内部,确保其只删除自己的那部分文件。

    stage("Clone frontend"){
           agent { 
              node { 
                  label 'slave' 
              } 
          }
          steps {
             sh """
                 echo "Clone frontend repo: ${repo_url_frontend} ${branch}"
                 pwd
             """
             dir("${work_dir_frontend}"){
                 deleteDir()
                     git(
                         url: "${repo_url_frontend}",
                         credentialsId: '73****74',
                         branch: "${branch}"
                     )
             }
          }
       }
    
       stage("Clone backend"){
           agent { 
              node { 
                  label 'slave' 
              } 
          }
          steps {
             sh """
                 echo "Clone backend repo: ${repo_url_frontend} ${branch}"
                 pwd
             """
             dir("${work_dir_backend}"){
                 deleteDir()
                     git(
                         url: "${repo_url_backend}",
                         credentialsId: '73****74',
                         branch: "${branch}"
                     )
             }
          }
       }
    
  2. 普通变量中不能直接使用 shell 命令
    下面案例中直接将ts赋值为shell 的date命令,应该使用专门的Date函数

    错误案例:
    ts=`date +%s`
    git tag -m 'Build docker image dev/3.8.148-dev' dev/3.8.148-dev-${ts}
    git describe
    git push origin dev/3.8.148-dev-${ts}
    
    解决方法:
    def createDate() {
        return new Date().format('yyyyMMdd-HHmmss')
    }
    date_str = createDate()
    git tag -m 'Build docker image dev/3.8.148-dev' dev/3.8.148-dev-${date_str}
    
  3. agent any导致 post 阶段错误
    若在pipeline 中设置了 agent any, 那么在post 阶段使用sh 命令就会报错,准确的方式是将agent any 指定为一个基础的agent节点, 那么post命令会在指定的节点上执行。

    错误案例:
    pipeline {
     agent any
     
     post {
         always {
             echo 'I have finished'
         }
         success {
             echo "scale , succeed!"
             sh """
             curl -X POST -H "Content-Type: application/json" -d '{"msg_type":"text","content":{"text":"sre_test_dev notify, succeed!"}}' https://open.feishu.cn/open-apis/bot/v2/hook/46***05
             """
         }
         failure {
             echo "scale , failed!"
             sh """
             curl -X POST -H "Content-Type: application/json" -d '{"msg_type":"text","content":{"text":"sre_test_dev notify, failed!"}}' https://open.feishu.cn/open-apis/bot/v2/hook/46***05
              """
         }
     }
    }
    
    正确案例:
    pipeline {
     agent { 
         node { 
             label 'SRE_BUILD_NODE' 
         } 
     }
     
     post {
         always {
             echo 'I have finished'
         }
         success {
             echo "scale , succeed!"
             sh """
             curl -X POST -H "Content-Type: application/json" -d '{"msg_type":"text","content":{"text":"sre_test_dev notify, succeed!"}}' https://open.feishu.cn/open-apis/bot/v2/hook/46***05
             """
         }
         failure {
             echo "scale , failed!"
             sh """
             curl -X POST -H "Content-Type: application/json" -d '{"msg_type":"text","content":{"text":"sre_test_dev notify, failed!"}}' https://open.feishu.cn/open-apis/bot/v2/hook/46***05
             """
         }
     }
    }
    

4 说明

  1. www.jenkins.io/doc

你可能感兴趣的:(Devops,jenkins,cicd,jenkins,踩坑指南)