一千萬個為什麽

搜索

詹金斯文件庫中的Jenkins庫配置



現在我們有很多類似Jenkinsfile的項目。我們使用一些實用程序開發共享庫,而不是使用 copypasting 。這個庫在每個Jenkinsfile中動態加載,並且有一些參數在呼叫之間重復。例如,實用程序具有自定義的Slack消息發布功能,並且頻道bot令牌和一些固定文本總是相同。

我們沒有提供這些參數給這個Slack函數的每一個調用,而是我們已經想到了在所有這些“constant”參數的開頭全局地創建一個配置文件並加載它。

我們嘗試了一個 config.json ,並使用readJSON這樣的步驟:

def load(path) {
    env.CONFIGURATION =  readJSON(file: path)
}

所以配置是一個環境變量,所以它是全球性的。問題是似乎環境變量只能是字符串,所以JSON被破壞了(例如,我們不能執行 env.CONFIGURATION.slack.channel )。

我們也在 Jenkinsfile 中嘗試了以下內容:

def CONFIG = readJSON(file: path)

但是,CONFIG在庫腳本中不可見。

所以現在,這些問題:

  1. 我們的方法是否正確?將所有常用配置放在一個文件中 加載它供庫腳本查看。

  2. 如果不正確,您將如何處理我們的問題?只是 在每次調用時將config作為參數傳遞,這就是所有?

在此先感謝您的幫助。

轉載註明原文: 詹金斯文件庫中的Jenkins庫配置

一共有 2 個回答:

您應該查看全局共享庫,它將允許您在不同的Jenkins文件中重用邏輯。

而不是依賴於環境,顯式傳遞參數並從函數返回值可能會更安全,這會使其行為更加明確。另一個好處是您可以單元測試使用它們

我也有相同的想法(不同管道的不同配置文件)。 我使用pipeline.properties來存儲我的變量。

properties = readProperties file: 'pipeline.properties'
echo "Immediate one ${properties.repo}"

Drawbacks: Due to the groovy early evaluation problems. The value will be null when you use the ${properties.repo} in some shared library closure (eg, agent { label $properties.agentLabel }, the agentLabel will be null).

See: https://stackoverflow.com/questions/46630168/in-a-declarative-jenkins-pipeline-can-i-set-the-agent-label-dynamically

http://jenkins-ci.361315.n4.nabble.com/can-i-use-variable-to-specify-the-agent-label-in-my-declarative-pipeline- td4897177.html