【问题标题】:How to execute single step or post-build action on a docker host if Jenkins pipeline is dockerized?如果 Jenkins 管道被 dockerized,如何在 docker 主机上执行单步或构建后操作?
【发布时间】:2020-07-22 01:49:32
【问题描述】:

假设我有一个包含多个步骤的 dockerized 管道。 docker容器定义在Jenkinsfile开头:

pipeline {
  agent {
    docker {
      image 'gradle:latest'
    }
  }

  stages {
    // multiple steps, all executed in 'gradle' container 
  }

post {
    always {
      sh 'git whatever-command' // will not work in 'gradle' container
    }
  }
}

我想在构建后操作中执行一些git 命令。问题是gradle 图像没有git 可执行文件。

script.sh:第 1 行:git:找不到命令

我如何在 Docker 主机上执行它,仍然使用 gradle 容器进行所有其他构建步骤?当然,我不想为每个步骤明确指定容器,而是指定特定的 post-post 操作。

【问题讨论】:

    标签: jenkins jenkins-pipeline jenkins-docker


    【解决方案1】:

    好的,下面是我的工作解决方案,将多个阶段(构建和测试)分组到单个 dockerized 阶段(Dockerized gradle)和在 docker 主机和 docker 容器之间重用的单个工作区(请参阅reuseNode docs):

    pipeline {
      agent {
        // the code will be checked out on out of available docker hosts
        label 'docker'
      }
    
      stages {
        stage('Dockerized gradle') {
          agent {
            docker {
              reuseNode true // < -- the most important part
              image 'gradle:6.5.1-jdk11'
            }
          }
          stages{
            // Stages in this block will be executed inside of a gradle container
            stage('Build') {
              steps{
                script {
                    sh "gradle build -x test"
                }
              }
            }
            stage('Test') {
              steps{
                script {
                  sh "gradle test"
                }
              }
            }
          }
        }
        stage('Cucumber Report') {
          // this stage will be executed on docker host labeled 'docker'
          steps {
            cucumber 'build/cucumber.json'
          }
        }
      }
    
      post {
        always {
          sh 'git whatever-command' // this will also work outside of 'gradle' container and reuse original workspace
        }
      }
    }
    

    【讨论】:

    • 感谢基里尔这帮助我解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多