Jenkins管道在作业之间共享信息
我们正试图在Jenkins上定义一组作业,这些作业将执行真正具体的操作。JobA1将构建maven项目,而JobA2将构建.NET代码,JobB将其上载到Artifactory,JobC将从Artifactory下载,JobD将部署它。 每个作业都有一组参数,因此我们可以对任何产品(大约100个)重复使用相同的作业 这背后的想法是创建黑匣子,我用一些输入调用一个作业,我总是得到一些输出,两者之间发生的任何事情我都不在乎。另一方面,这允许我们分别改进每项工作,增加所需的复杂性,所有产品都将立即受益 我们希望使用Jenkins管道来协调操作的执行。我们将根据每个环境/使用情况设置管道Jenkins管道在作业之间共享信息,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,我们正试图在Jenkins上定义一组作业,这些作业将执行真正具体的操作。JobA1将构建maven项目,而JobA2将构建.NET代码,JobB将其上载到Artifactory,JobC将从Artifactory下载,JobD将部署它。 每个作业都有一组参数,因此我们可以对任何产品(大约100个)重复使用相同的作业 这背后的想法是创建黑匣子,我用一些输入调用一个作业,我总是得到一些输出,两者之间发生的任何事情我都不在乎。另一方面,这允许我们分别改进每项工作,增加所需的复杂性,所有产品都将立即受益
- PipelineA将调用JobA1,然后调用JobB以上载到artifactory
- PipelineB将下载包JobC,然后部署到暂存
- PipelineC将下载包JobC,然后根据一些内部验证将其部署到生产环境中
我是在走正确的道路还是在做一些奇怪的事情?问题的第一部分(在作业之间传递变量)请使用以下命令作为生成后部分:
post {
always {
build job:'/Folder/JobB',parameters: [string(name: 'BRANCH', value: "${params.BRANCH}")], propagate: false
}
}
上述生成后操作适用于所有生成结果。类似地,可以在当前生成状态下触发生成后操作。我使用了来自当前构建(JobA)的分支参数作为“JobB”使用的参数(提供作业的确切位置)。请注意,在JobB中应该定义一个类似的参数
此外,为了共享工作区,您可以在作业之间引用和共享工作区。您可以使用。查看its以实现多个管道共享的库并定义共享的全局变量。有两种方法可以在作业之间共享信息:
stash
/unstash
在单个管道中的多个作业之间共享文件/数据
stage ('HostJob') {
build 'HostJob'
dir('/var/lib/jenkins/jobs/Hostjob/workspace/') {
sh 'pwd'
stash includes: '**/build/fiblib-test', name: 'app'
}
}
stage ('TargetJob') {
dir("/var/lib/jenkins/jobs/TargetJob/workspace/") {
unstash 'app'
build 'Targetjob'
}
通过这种方式,您始终可以将文件/exe/数据从一个作业复制到另一个作业。管道插件中的这个特性比工件更好,因为它只在本地保存数据。工件在构建后被删除(有助于数据管理)其思想不是从作业调用作业,而是使用管道来编排“黑匣子”。Groovy管道调用JobA,然后Groovy管道接收输出并调用JobB,依此类推。对于步骤2d),还可以使用管道语法:
copyArtifacts(projectName:'sourceproject')代码>