簡體   English   中英

當 jenkins 作業在從機上運行時,如何使用 Jenkinsfile 管道腳本從主機讀取 yaml 文件?

[英]How to read yaml file from master using Jenkinsfile pipeline script when jenkins job is running on slave machine?

我正在為 Jenkins 管道構建一個共享庫(我不是 CI 工程師)。 作為其中的一部分,我們正在考慮在 yaml 文件中提供配置,並從 yaml 文件中讀取 Jenkinsfile 管道腳本。

因此,我們計划將 Jenkinsfile 和 yaml 文件提交到一個 git 存儲庫(假設為 repo A)中,並且該作業將在使用另一個 git 存儲庫(假設為 repo B)的從屬機器上運行。 Jenkinsfile 將在克隆 repo A 后從 master 執行。 yaml 文件也在 master 工作區中。 在從站中,將克隆 repo B 並按照 Jenkinsfile 中的定義進行構建。 但我的問題是,如何從 Jenkinsfile 腳本中讀取 yaml 文件,而不必在從站中克隆 repo A,即,我如何從 Jenkinsfile 中引用 master 中存在的文件而不是 slave 中的文件? 出現這個問題是因為,我嘗試打開的任何文件都是從從屬設備而不是從主設備打開的。

提前致謝。

編輯:我忘記提及的事情。 我們實際上考慮過在 master 中使用 stash 並在 slave 中使用 unstash。 但問題是我們只做工作配置,環境是由其他一些團隊提供給我們的,這些團隊也提供給許多其他團隊。 因此,master 很少有空閑的 executors。 因此,即使我們運行該作業,它也會掛起等待 master 空閑。 當管道腳本加載到主內存中時,還有其他方法可以加載 yaml 文件嗎?

我認為最直接的方法是使用stash Stashes 是可以在一個節點上創建並復制到任何其他節點的臨時包。

master 上有一些用於包創建的開銷,因此不建議將 stashes 用於真正的大文件,但它們非常適合您傳輸小配置文件的用例。

node('master') {
    // Create temporary stash package on master
    stash name: 'MyConfiguration', includes: 'SomeFile.yaml'
}

node('MySlave') {
    // Copy to and extract the stash package on slave
    unstash 'MyConfiguration'
}

這期望 'SomeFile.yaml' 位於 master 上的工作區中,並且還將其解壓縮到 slave 上的工作區。 如果您想要WORKSPACE的子目錄,只需將stash和/或unstash步驟包裝在dir步驟中。

暫無
暫無

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

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