我用下面的groovy脚本生成了一组多分支管道作业:
[
'repo1',
'repo2',
].each { service ->
multibranchPipelineJob(service) {
displayName(service)
branchSources {
git {
remote("git@gitlab.com:whatever/${service}.git")
credentialsId('gitlab-ssh-key')
}
}
orphanedItemStrategy {
discardOldItems {
daysToKeep(0)
numToKeep(30)
}
}
triggers {
periodic(5)
}
}
}
在每次回购中,Jenkinsfile如下所示:
#!/usr/bin/env groovy
properties([
gitLabConnection('ci@gitlab.com'),
pipelineTriggers([
[
$class : 'GitLabPushTrigger',
triggerOnPush : true,
triggerOnMergeRequest: true,
]
]),
disableConcurrentBuilds(),
overrideIndexTriggers(false)
])
node {
def sbtHome = tool name: 'sbt-0.13.15', type: 'org.jvnet.hudson.plugins.SbtPluginBuilder\$SbtInstallation'
stage('Checkout') {
checkout scm
}
stage('Build') {
sh "'${sbtHome}/bin/sbt' clean compile"
}
stage('Test') {
sh "'${sbtHome}/bin/sbt' test"
}
if (env.BRANCH_NAME == 'develop' || env.BRANCH_NAME == 'master') {
stage('Publish') {
sh "'${sbtHome}/bin/sbt' publish"
}
}
}
一切正常。种子项目从第一个脚本生成所有文件夹,并且正确构建了给定repo的所有分支。
不幸的是,在向gitlab提交推送后,我无法为任何分支触发构建。
我已经正确配置了jenkins——我是说gitlab插件,有一个连接,一切都很好。
我还在gitlab端添加了一个网络钩子,它也可以正常运行。发送测试推送后,我从jenkins收到200 OK
,我确实在日志中看到扫描分支已经开始并正确检测到更改。不幸的是,更改后的分支的构建没有开始。这是分支扫描日志的摘录:
Checking branch ci
‘Jenkinsfile’ found
Met criteria
Changes detected: ci (a7b9ae2f930b0b10d52bb42f1ecf96a68bba4a30 → 39a4c1a65051d5e90079feec14ad22455a77c58e)
Did not schedule build for branch: ci
我百分之百确信这不是我的jenkins实例和gitlab帐户之间通信的问题。我看到推送到gitlab后webhook被触发,我看到请求被发送,分支扫描被运行。也检测到了变化,但究竟为什么作业没有启动?我还彻底阅读了文档,并正确配置了所有文档。
Jenkins version: 2.150.3
Gitlab version: 11.8.1-ee
编辑
似乎在将jenkins升级到v.2.164.1之后,一切都开始正常工作。
可能您已将基本分支构建策略配置为仅包含特定分支,例如使用Exact Name:master
,这将跳过示例中的分支ci
。
确保您的Jenkins分支构建配置涵盖您正在测试的分支。还要确保未设置抑制SCM自动触发选项。
请注意,组织或文件夹级别的设置将影响特定的项目和作业设置,除非它们在较低级别上被特别覆盖。
我认为您需要使用includes()来指定标识将包括哪些分支的模式:
branchSources {
git {
remote("git@gitlab.com:whatever/${service}.git")
credentialsId('gitlab-ssh-key')
includes('ci')
}
}
您可以指定许多模式,其中可以包括通配符。例如:
includes("master release/* feature/* bugfix/*")
对于更细粒度的控制,也有相应的excludes()
。
我发现这个非常有用的设置示例(与Jenkins和GitLab的持续集成)。尤其是部分源代码管理:
我们需要将名称指定为“源”,其他部分将使用该名称。对于Refspec,我们需要输入:refs/head/*: refs/远程数据库/源/*refs/mericed-请求/*/head: refs/远程数据库/源/mericed-请求/*
并且还:
分支规范我们需要源/${gitlabSource分支}
,它将根据我们接下来要设置的Web挂钩填写。
编辑1
对于一个多分支管道,可以尝试以下操作:
ci
ci
编辑2
我找不到合适的git项目来运行并尝试复制这种行为。因此,如果有人知道一个类似的项目,可以分享,请评论,我可以做一些更多的测试。
对于Gitlab(请求试用密钥,否则将是Gitlab社区版):
sudo docker run --detach --hostname gitlab.example.com --publish 443:443 --publish 80:80 --publish 22:22 --name gitlab --restart always --volume /srv/gitlab/config:/etc/gitlab --volume /srv/gitlab/logs:/var/log/gitlab --volume /srv/gitlab/data:/var/opt/gitlab gitlab/gitlab-ee:11.8.1-ee.0
对于Jenkins:
sudo docker run -u root --rm -d -p 8080:8080 -p 50000:50000 -v jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:2.150.3
希望这能帮到你!
我是詹金斯/格里特的新手。我在试着把gerrit和Jenkins融合在一起。我有一个jenkins项目设置,当在我的git存储库中创建(push)变更集时会触发,该变更集由gerrit项目托管。主分支不接受直接推送。我使用以下命令推送到存储库。 git推原点头:参考/for/master 现在,当我做一个推动时,詹金斯项目不会自动启动。我可以用“查询和触发gerrit补丁”手动触发gerrit事件
问题内容: 我安装了Github插件并将Poll SCM设置为1分钟。下面是我的配置的图片。 因此,当我提交仓库时,一分钟后构建便开始了。 在我的github存储库上,我创建了一个webhook(但超时)和一个也不起作用的服务(我认为问题出在我的jenkins服务器上)。 但是缺少“将更改推送到GitHub时生成”复选框。 问题答案: 在GitHub插件v1.25.1版本上,触发器已重命名为 Gi
问题内容: 我在Jenkins中配置了项目,该项目轮询SCM并在发布更改时开始构建。有一个后构建动作来构建另一个项目。我的问题是,之后要构建的项目具有其自己的参数。如何知道生成后操作触发时指定了哪个参数?现在,如果我使用“选择”,是否只是选择第一个?我如何挑选其他人? 问题答案: 好吧,让我们一个接一个:) 如果要查看使用了哪个参数,可以安装此插件:显示构建参数插件 如果要使用特定参数触发构建,请
问题内容: 到目前为止,触发Jenkins构建工作可以创建新的请求请求,推动更改并留下评论,例如,当我在GitHub中点击绿色的“合并请求请求”按钮时,我看不到Jenkins中正在运行任何作业。 我的工作设置 参考规格: 分支说明符:或 参考了[GitHub pull request builder插件文档] [1]。 詹金斯原木 GITHUB Web日志 日志1) 请求 有效负载 日志2) 请求
我有一个为自动化构建配置的docker hub存储库。请参见下图。当我按下“save and trigger build”时,我看到一个错误页面,上面只写着“Oops,there was a error!” 我试着发邮件给码头工人支持,但没有成功 知道为什么会发生这种情况以及如何解决吗?
问题内容: 詹金斯似乎并没有自动提出需要从Gerrit进行审查的更改。 我们正在使用Gerrit触发器。 另外,如果我尝试手动触发一些操作,似乎什么也没发生。 Gerrit触发器管理区域中的“控件”似乎并不多…闪烁“正在启动”,“正在停止”或“正在重新启动” 有什么想法我做错了吗? 问题答案: 我只是遇到了同样的问题,这与我的工作中用于匹配分支的默认Gerritt设置有关。在工作中,在Gerrit