1

目标

我正在尝试使用 GitHub 组织插件和 jenkins 管道来编排依赖链。

由于我正在构建的产品具有许多共享依赖项,因此我使用 nuget 包来管理依赖项版本控制和更新。

但是,我无法为进行编排的项目获取必要的工件/信息。

战略

在 SCM 更改时,任何上游共享库都应该构建一个 nuget 包并协调任何需要新引用的下游构建:

  1. 我在每个上游项目中对下游编排进行硬编码。 因此,如果构建了 A,则依赖于 A 的 B 和 C 将使用来自 A 的最新工件构建。之后,依赖于 B 和 C 的 D 以及依赖于 A 和 C 的 E 将使用来自 A 的最新工件构建A、B、C 根据需要。等等。 这些都将由 A 的 Jenkinsfile 分阶段触发,因为依赖项是使用“Build Job: Jobname”语法构建的。我找不到一个解决方案,我可以在每个步骤中将编排传递到下游,因为依赖项在下游发散和收敛,并且我不想触发对上游项目的不同引用的同一下游项目的多个构建。
  2. 我可以将父项目的工件信息传递给任何下游作业,但我面临的问题是,父项目没有任何下游工件的程序集版本信息(需要在下游进一步编排作业)。Stash/Unstash 似乎没有任何跨作业功能,并且归档/取消归档已被弃用。

TLDR: 我需要一种将字符串或文本文件上游传递到作业中间执行(来自多个下游作业)的方法,或者我需要一种用于具有共享下游依赖项的多个下游作业的方法,以协调并共同将信息传递给下游作业(仅触发一次)。

谢谢!

4

3 回答 3

1

这篇文章可能对您有用 - https://www.cloudbees.com/blog/using-workflow-deliver-multi-componentapp-pipeline

有时需要工件方式。上游工作:

void runStaging(String VERSION) {
    stagingJob = build job: 'staging-start', parameters: [
        string(name: 'VERSION', value: VERSION),
    ]
    step ([$class: 'CopyArtifact',
        projectName: 'staging-start',
        filter: 'IP',
        selector: [$class: 'SpecificBuildSelector',
            buildNumber: stagingJob.id
        ]
    ]);
    IP = sh(returnStdout: true, script: "cat IP").trim()
    ...
}

下游工作

sh 'echo 10.10.0.101 > IP'
archiveArtifacts 'IP'
于 2017-05-04T07:25:02.157 回答
0

我最终使用了内置的“归档”步骤(请参阅管道语法中的语法)和copyArtifact 插件(必须使用带有类名的 Java 样式步骤)。

我希望能够合并工作流,而不是必须在每个构建中协调下游构建与构建下游的任何东西,但到目前为止还没有找到任何解决方案。

于 2016-09-30T00:29:38.050 回答
0

您可以使用构建结果的 buildVariables。

主要工作 - 配置:管道工作

node {
    x = build job: 'test1', quietPeriod: 2
    echo "$x.buildVariables.value1fromx"
}

test1 - 配置:管道作业

node {
    env.value1fromx = "bull"
    env.value2fromx = "bear"
}
于 2017-01-17T11:52:17.513 回答