Jenkins管道multibranch问题在并行作业后重用节点类型

时间:2016-10-02 17:46:33

标签: jenkins jenkins-pipeline jenkins-workflow multibranch-pipeline

我尝试将CI流程从JobDSL迁移到多分支流水线设置。作为第一步,我决定让管道委托回到现有的工作(传递所需的参数)我的管道如下所示(伪代码)

stage('setup')
node('cotroller') {
  ...
}


stage('test') {
  parallel {
    'web' : {build job 'web-test' ..params...},
    'API' : {build job 'api-test' ..params...}
  }
}

stage('build') { 
  parallel {
    'web' : {build job 'web-build' ..params...},
    'API' : {build job 'api-build' ..params...}
  }
}

stage('publish') {
  node('controller'){
    sh './gradlew publishArtifacts'
  }
}

但是我在上次发布时遇到了问题&#39;阶段。当它启动gradle目标时,它正确地重新使用了“设置”中的工作区。阶段,但似乎执行在一个耐用的&#39;来自原始结帐的子文件夹(即设置阶段的过去在/mnt/jenkins/workspace/<branchname>/<random_hash>/中执行,但是最后一个gradle目标在/mnt/jenkins/workspace/<branchname>/<random_hash>@tmp/durable-<hash>/script.sh等文件夹中执行)这导致找不到gradlew错误

我尝试过使用目录(&#39; /...&# 39;){...},但似乎没有解决问题......任何帮助或指导都会非常感谢!

2 个答案:

答案 0 :(得分:1)

保存设置路径

您可以尝试从setup阶段保存工作目录,例如:

stage('setup')
node('cotroller') {
  def setupPath = pwd()
  ...
}


stage('test') {
  parallel {
    'web' : {build job 'web-test' ..params...},
    'API' : {build job 'api-test' ..params...}
  }
}

stage('build') { 
  parallel {
    'web' : {build job 'web-build' ..params...},
    'API' : {build job 'api-build' ..params...}
  }
}

stage('publish') {
  node('controller'){
    dir("${setupPath}") {
      sh './gradlew publishArtifacts'
    }
  }
}

使用全局工具配置

根据Jenkins pipeliens tutorial,推荐的方法是在Jenkin的Global Tool configuration中配置Gradle安装路径,将其命名为任何内容(例如&#34; Gradle&# 34;)然后在你的管道中使用它:

...

stage('publish') {
  node('controller'){
    def gradleHome = tool 'Gradle'        
    sh "${gradleHome}/bin/gradlew publishArtifacts'
  }
}

答案 1 :(得分:0)

groovy语法对我不起作用。不得不改为:

stage('test') {
    parallel (
        'web' : {build 'web-test' ..params...},
        'API' : {build 'api-test' ..params...}
    )
}