簡體   English   中英

Jenkins管道多分支問題在並行作業后重用節點類型

[英]Jenkins pipeline multibranch issue reusing node type after parallel jobs

我正在嘗試將我們的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'
  }
}

但是我在最后的“發布”階段遇到了問題。 當啟動gradle目標時,它可以正確地重用'setup'階段中的工作空間,但是似乎在原始結帳的'durable'子文件夾中執行(即,過去在setup階段中在/mnt/jenkins/workspace/<branchname>/<random_hash>/但是最后一個gradle目標在/mnt/jenkins/workspace/<branchname>/<random_hash>@tmp/durable-<hash>/script.sh等文件夾中執行在gradlew中找不到錯誤

我試過使用目錄('/ ...'){...},但這似乎並沒有解決問題...任何幫助或指導都將不勝感激!

保存設置路徑

您可以嘗試在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教程的建議 ,方法是在Jenkin的Global Tool configuration配置Gradle安裝路徑,將其命名為任何名稱(例如“ Gradle ”),然后像這樣在您的管道中使用它:

...

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

常規語法對我不起作用。 不得不將其更改為:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM