我剛剛將我們開發工廠的jenkins版本升級到lts。我們之前使用的是舊的 2.x 版本
事實上,我們有一個加載所有腳本的階段:
stage('Load Utilities Scripts') {
checkout scm
echo "${job_name}"
modules.messages = load "${jenkins_home}/workspace/${job_name}@script/pipelines/utils/slack_functions.groovy"
modules.ansible = load "${jenkins_home}/workspace/${job_name}@script/pipelines/utils/ansible_functions.groovy"
modules.jenkins = load "${jenkins_home}/workspace/${job_name}@script/pipelines/utils/jenkins_functions.groovy"
modules.pic_env = load "${jenkins_home}/workspace/${job_name}@script/pipelines/utils/pic_env.groovy"
modules.maven = load "${jenkins_home}/workspace/${job_name}@script/pipelines/utils/maven_functions.groovy"
modules.git = load "${jenkins_home}/workspace/${job_name}@script/pipelines/utils/git_functions.groovy"
}
它作業得很好,只是現在腳本位于
/var/jenkins_home/workspace/SAGES2_BUILD_AUTO@script/357f3acc22b0fbb05a66735d46d7d7eb950a2e836ab3762b1905784bc550ee5e on builtin
/var/jenkins_home/workspace/SAGES2_BUILD_AUTO on builtin
我想這是一個安全演進(我知道 jenkins 上的 groovy 腳本插件經常被棄用,但這是另一個問題)。
我怎樣才能得到這個字串:357f3acc22b0fbb05a66735d46d7d7eb950a2e836ab3762b1905784bc550ee5e?有沒有像 job_name 或 jenkins_home 這樣的變數?誰生成這個令牌,在哪里生成?我可以把手放在這根弦上嗎?它代表什么?
uj5u.com熱心網友回復:
您可以通過附加相對部分來獲取當前目錄并構建絕對路徑。
modules.messages = load pwd() "@script/pipelines/utils/slack_functions.groovy"
或類似的東西
modules.messages = load "${WORKSPACE}@script/pipelines/utils/slack_functions.groovy"
似乎這是作為安全改進而引入的。所以你必須像下面這樣解決這個問題。
script {
// Locate the jenkins folder
// This is done because there is a new sub-folder (like : 17a4ba1ed1ce777b18c5...)
git_jenkins_folder = sh (
script: "find " WORKSPACE "@script -type d -name 'jenkins' -printf '%T@ %Tc %p\n' | sort -rn | head -1 | cut -d' ' -f9",
returnStdout: true
).trim()
// Load the groovy methods in groovy files
slack = load git_jenkins_folder "/pipelines/utils/slack_functions.groovy"
}
信用:為什么 Jenkins 在 workspace@script 檔案夾中創建一個子檔案夾來檢查 git 代碼而不是 workspace@script 本身?
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/488088.html
標籤:詹金斯 詹金斯管道 詹金斯插件 jenkins-groovy
