我们希望在jenkins中的不同下游构建中动态触发集成测试.我们有一个参数化集成测试项目,它将测试名称作为参数.我们从git repo动态确定我们的测试名称.
我们有一个父项目,它使用jenkins-cli为源代码中的每个测试开始构建集成项目.父项目和集成项目通过匹配指纹相关联.
这种方法的问题是聚合测试结果不起作用.我认为问题是"下游"集成测试是通过jenkins-cli启动的,所以jenkins没有意识到它们是下游的.
我看了很多jenkins插件试图让这个工作.Join和Parameterized Trigger插件没有帮助,因为他们希望构建一个静态的项目列表.可用于参数化触发器的参数工厂也不起作用,因为没有工厂可以创建任意参数列表.Log Trigger插件不起作用.
Groovy Postbuild插件看起来应该可以工作,但我无法弄清楚如何从中触发构建.
要求
因此,Azure DevOps 中有一些新功能允许管道触发其他管道,并在此处记录:https : //docs.microsoft.com/en-us/azure/devops/pipelines/build/triggers?view=azure- devops&tabs=yaml#pipeline-triggers-1听起来不错,除了我无法获得所需的行为。我想在同一个存储库中有 2 个管道:
管道 A 语法
resources:
pipelines:
- pipeline: database
source: database
trigger:
branches:
- develop
- release/*
# The stages filter should work, according to: https://docs.microsoft.com/en-us/azure/devops/pipelines/build/triggers?view=azure-devops&tabs=yaml
# However, this error occurs when specifying: /azure-pipelines.yml (Line: 8, Col: 15): Stage filters in pipeline resource database is not supported.
#stages:
#- Build
- pipeline: auth
source: auth
trigger:
branches:
- develop
- release/* …
Run Code Online (Sandbox Code Playgroud) 我们使用 Azure DevOps 进行持续集成。管道配置为每当将更改推送到功能分支时就运行构建。这是快速反馈所需要的。
此外,我们对主分支有一个政策,即在合并功能分支之前需要成功的验证构建。现在,当为功能分支创建拉取请求 (PR) 时,Azure DevOps 会自动触发相应的验证构建。
所有这些都很好,但有一个逆境:如果已经创建了 PR 并且更新了功能分支,则会触发两个构建(一个单独用于功能分支,另一个用于合并的结果,即验证构建) )。
我知道有些人可能想要两个构建,但在我们的情况下(可能在每个正常情况下),如果仅触发验证构建会更好。
问题:有没有办法告诉 Azure DevOps 它应该忽略任何已拥有 PR 的分支的分支触发器?当然,具有同等结果的解决方法也是受欢迎的。
这个问题已经作为一个问题发布在这里,但我在回复中找不到令人满意的答案(例如,分支过滤器和命名策略不能解决问题)。
continuous-integration build-triggers pull-request azure-devops
我目前有一个项目,其中包括大量的外部,需要在外部更新时重建,以保持文物新鲜.只有在分支本身进行更改时,我无法找到在外部更改时触发svn构建的方法.
是否有TeamCity的某些功能可以执行此操作,如果没有,添加此构建触发器的最佳方法是什么?
我想在中定义构建触发器Jenkinsfile
。我知道如何为BuildDiscarderProperty执行此操作:
properties([[$class: 'jenkins.model.BuildDiscarderProperty', strategy: [$class: 'LogRotator', numToKeepStr: '50', artifactNumToKeepStr: '20']]])
Run Code Online (Sandbox Code Playgroud)
构建另一个项目后,如何设置启动作业的构建触发器。我在Java API文档中找不到合适的条目。
编辑:我的解决方案是使用以下代码:
stage('Build Agent'){
if (env.BRANCH_NAME == 'develop') {
try {
// try to start subsequent job, but don't wait for it to finish
build job: '../Agent/develop', wait: false
} catch(Exception ex) {
echo "An error occurred while building the agent."
}
}
if (env.BRANCH_NAME == 'master') {
// start subsequent job and wait for it to finish
build '../Agent/master', wait: true
}
}
Run Code Online (Sandbox Code Playgroud)