1. 持续集成
  2. 词汇表
持续集成 / 最佳实践 / Jenkins when 条件判断

Jenkins when 条件判断

文章内容
  1. Jenkinsfile
  2. 截图

Jenkins 可使用 when 进行条件判断,决定是否执行整个阶段,实现多种场景:

  • 合并请求时:检查代码规范
  • 代码合并后:构建制品、部署
  • git tag: 构建制品、部署

Jenkinsfile

pipeline {
  agent any
  stages {
    stage('检出') {
      steps {
        checkout([$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]],
        userRemoteConfigs: [[url: env.GIT_REPO_URL, credentialsId: env.CREDENTIALS_ID]]])
      }
    }
    stage('合并请求时:检查代码规范') {
      when {
        changeRequest()
      }
      steps {
        script {
          sh 'npm run lint'
        }
      }
    }
    stage('无论何时:单元测试') {
      steps {
        sh 'npm run test'
      }
    }
    stage('无论何时:编译') {
      steps {
        sh 'npm run build'
      }
    }
    stage('代码合并后或 git tag:构建 Docker 镜像') {
      when {
        anyOf {
          branch 'main';
          tag '*'
        }
      }
      steps {
        script {
          if (env.TAG_NAME ==~ /.*/ ) {
            DOCKER_IMAGE_VERSION = "${env.TAG_NAME}"
          } else {
            DOCKER_IMAGE_VERSION = "${env.BRANCH_NAME.replace('/', '-')}-${env.GIT_COMMIT_SHORT}"
          }
          // 注意:创建项目时链接标识不要使用下划线,而是连字符,比如 My Project 的标识应为 my-project
          // 请修改 build/my-api 为你的制品库名称和镜像名称
          CODING_DOCKER_IMAGE_NAME = "${env.PROJECT_NAME.toLowerCase()}/build/my-api"
          // 本项目内的制品库已内置环境变量 CODING_ARTIFACTS_CREDENTIALS_ID,无需手动设置
          docker.withRegistry("https://${env.CCI_CURRENT_TEAM}-docker.pkg.coding.net", "${env.CODING_ARTIFACTS_CREDENTIALS_ID}") {
            docker.build("${CODING_DOCKER_IMAGE_NAME}:${DOCKER_IMAGE_VERSION}").push()
          }
        }
      }
    }
    stage('代码合并后或 git tag:部署') {
      when {
        anyOf {
          branch 'main';
          tag '*'
        }
      }
      steps {
        sh 'coscmd upload -r ./dist /'
      }
    }
  }
}

截图


上一篇在持续集成中使用 Docker
最近更新
感谢反馈有用
感谢反馈没用

在阅读中是否遇到以下问题?

您希望我们如何改进?