将工件或字符串传递到 Jenkins 管道中的上游作业

Pass Artifact or String to upstream job in Jenkins Pipeline

目标

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

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

但是,我无法为进行编排的项目获取必要的 artifacts/info。

策略

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

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

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

谢谢!

我最终使用了内置的 "archive" 步骤(see syntax in pipeline syntax) in combination with copyArtifact plugin(必须使用名称为 class 的 Java 样式步骤)。

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

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

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

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

test1 - 配置:管道作业

node {
    env.value1fromx = "bull"
    env.value2fromx = "bear"
}

本文可能对您有用 - 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'