以下是我的工作。
首先,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'
}
}