以下是我的工作。
首先,Jekinsfile
是在簽出之前從結賬中讀取的,因此易於使用kumascript
子模塊中的一個,並且從不同的回購中讀取它要困難得多(不可能?)。
在詹金斯2.68與Git插件3.4.1,我設置了一個多分支管道。在一個來源是Git的,指向kumascript庫:
「發現分支」發現樹枝在倉庫中,並開始建立他們。
「清除存儲庫並強制克隆」解決了jgit
在檢出之前未取出子模塊存儲庫的問題,因此目標提交不可用。它使看起來像這樣在詹金斯記錄一個錯誤:
> git fetch --no-tags --progress https://github.com/mdn/kumascript +refs/heads/*:refs/remotes/origin/*
Checking out Revision 998d9e539127805742634ef1c850221cf04ca2c7 (build-with-locales-1340342)
org.eclipse.jgit.errors.MissingObjectException: Missing unknown 998d9e539127805742634ef1c850221cf04ca2c7
at org.eclipse.jgit.internal.storage.file.WindowCursor.open(WindowCursor.java:158)
at org.eclipse.jgit.lib.ObjectReader.open(ObjectReader.java:227)
at org.eclipse.jgit.revwalk.RevWalk.parseAny(RevWalk.java:859)
at org.eclipse.jgit.revwalk.RevWalk.parseCommit(RevWalk.java:772)
這個問題出現在https://issues.jenkins-ci.org/browse/JENKINS-45729予以報道,並報道固定在Git的客戶端插件2.5.0。
擦除回購看起來會強制完整提取,並且在安裝到父項目時可能需要。
Jenkins現在已配置爲爲存儲庫中的每個分支創建構建。要將其作爲子模塊檢出,父項目需要在Jenkins文件中手動檢出。我用詹的「管道語法」工具來幫助構建命令
一些格式化之後,這正好在我Jenkinsfile:
stage("Prepare") {
// Checkout Kuma project's master branch
checkout([$class: 'GitSCM',
userRemoteConfigs: [[url: 'https://github.com/mozilla/kuma']],
branches: [[name: 'refs/heads/master']],
extensions: [[$class: 'SubmoduleOption',
disableSubmodules: false,
parentCredentials: false,
recursiveSubmodules: true,
reference: '',
trackingSubmodules: false]],
doGenerateSubmoduleConfigurations: false,
submoduleCfg: []
])
// Checkout KumaScript in subfolder
dir('kumascript') {
checkout scm
}
}
這將檢查出來的kuma
項目及其子模塊,並然後使用「vanilla」結帳簽出所請求的分支,但在子模塊目錄中:
從此,如果我想在kuma
中運行命令EPO,我運行它:
stage('Build') {
sh 'make build-kumascript VERSION=latest'
}
,如果我想在kumascript
子模塊運行它,我把它包在dir
:
stage('Lint') {
dir('kumascript') {
sh 'make lint VERSION=latest'
sh 'make lint-macros VERSION=latest'
}
}