当前位置: 首页 > 知识库问答 >
问题:

Jenkins管道:如何在不使用额外代理/执行器的情况下触发另一个作业并等待它

林弘文
2023-03-14

我正在尝试设置各种Jenkins管道,其最后阶段总是运行一些验收测试。长话短说,所有产品的验收测试和测试数据(其中大部分是共享的)都被检查到同一个存储库中,该存储库的大小约为0.5 GB。因此,似乎最好为验收测试设置一个单独的作业,并通过每个管道的“构建”步骤触发它,并提供适当的参数来运行相关测试。(有时在不重建产品的情况下重新运行这些测试也很有用)

stage('AcceptanceTest') {
    steps {
        build job: 'run-tests', parameters: ..., wait: true
    }
}

到目前为止,我发现我可以:

  1. 正常触发作业。但这使用了一个额外的代理/执行器,似乎没有办法告诉它重用构建中的代理/执行器(主管道)。两条管道都以“代理{标签'master'}”开头,但这似乎意味着“在匹配master的节点上分配一个新代理”。
  2. 使用“等待:错误”参数触发作业。这不会阻止执行程序,但这确实意味着我不能报告主管道中的测试结果。它给人的印象是测试阶段总是成功的。

有没有更好的办法?

共有3个答案

郁鸿博
2023-03-14

相关问题:Jenkis——在同一台机器中触发另一个管道作业——而不创建新的“执行器”

狄旭
2023-03-14

我不认为有其他方法可以实现声明式管道。

另一方面,对于脚本化管道,您可以在node{}之外执行此操作,它只会保留主节点上的一个执行器,释放从节点上的一个执行器。

stage("some") {
    build job: 'test'
    node {
        ...
方增
2023-03-14

我似乎已经解决了这个问题,在主管道的顶部添加了“agent none”,并将“agent{label'master'}”移动到构建阶段。然后,我可以在没有代理的情况下离开“AcceptanceTest”阶段,并像以前一样在“run tests”作业中定义它。我从文件中得到的印象是,如果你把代理人分为几个阶段,那么所有阶段都需要一个,但事实似乎并非如此。对于这个用例来说很幸运。。。

 类似资料:
  • 问题内容: 我将Groovy脚本作为Jenkins中Pipeline工作的一部分,如下所示: 由于将标记设置为,因此它并行执行多个其他自由式作业。但是,我希望所有作业完成后才能完成呼叫者作业。目前,Pipeline作业会触发所有作业并在几秒钟后自行完成,这不是我想要的,因为我无法跟踪总时间,而且我无法一次取消所有已触发的作业。 当并行完成所有作业时,如何纠正上述脚本以完成管道作业? 我试图将构建作

  • 我想做类似的事情——从触发器管道中调用“some_job_pipeline”,它将由参数控制器在同一个或某个特定的Jenkins节点上执行。如果是,则应在同一个/主/父作业jenkins节点上执行-不应创建新的“执行器”。如果我将“Node1”节点执行器计数设置为1,作业将成功运行(不需要第二个执行器)。 在这个例子中,我有一个Trigger_Main_Job,看起来像这样: 还有一些类似这样的管

  • 詹金斯不会执行任何工作。查看了这个问题后,我禁用了所有从属节点,但一个简单的作业甚至不会在主节点上运行。 怎么了?

  • 是否可以从另一个作业触发Jenkins多分支管道的立即扫描操作?我在将旧版本的Gitlab与Jenkins中的管道作业集成时遇到了某些问题,并遇到了这样的解决方法。 或者,现在可以使用notifyCommit web钩子触发扫描多分支管道吗? 这样做的目的是每当Git存储库中发生更改时扫描多分支管道,以便在这样的更改后检测到新的分支。另一个我无法以其他方式实现的目的(除了对我来说非常邪恶的每个分支

  • 问题内容: 如何从内部触发另一个作业的生成? 我假设这项工作是同一个github组织下的另一个存储库,该存储库已经有自己的Jenkins文件。 我也只想在分支名称为master时执行此操作,因为触发任何本地分支的下游构建都没有意义。 更新: 不过,执行时我还是报错 找不到名为some-downtream-job-name的参数化作业 我确定这项工作存在于jenkins中,并且与当前工作位于同一组织

  • 我在Scala中有一个要求,即运行一系列http调用,这些调用必须按顺序完成且不阻塞。我怎样才能做到这一点?