我们正在尝试在 Jenkins 上定义一组将执行真正特定操作的作业。 JobA1将构建maven项目,而JobA2将构建.NET代码,JobB将其上传到Artifactory,JobC将从Artifactory下载它,JobD将部署它。
每个作业都会有一组参数,因此我们可以对任何产品(大约 100 个)重复使用相同的作业。
这背后的想法是创建黑匣子,我调用一个带有一些输入的作业,并且我总是得到一些输出,无论之间发生什么,我都不关心。另一方面,这使我们能够单独改进每项工作,增加所需的复杂性,所有产品都会立即受益。
我们希望使用 Jenkins Pipeline 来编排操作的执行。我们将为每个环境/用途建立一个管道。
- PipelineA将调用JobA1,然后调用JobB上传到artifactory。
- PipelineB 将下载包 JobC,然后部署到 staging。
- PipelineC 将下载包 JobC,然后根据一些内部验证部署到生产环境。
我尝试从 JobA1 中获取一些变量(POM 基本内容,例如 ArtifactID 或 Version)注入到 JobB 但信息似乎没有被传输。
下载文件时也会发生同样的情况,我调用 JobC 但该文件位于作业工作区中,无法用于任何其他工作区,而且我担心“外部工作区管理器”插件会增加太多复杂性。
除了共享工作空间之外,还有什么方法可以实现我的目的吗?我知道共享工作区将导致无法同时运行两个管道
我是在走正确的道路还是在做一些奇怪的事情?
在作业之间共享信息有两种方法:
-
您可以使用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/数据从一个作业复制到另一个作业。管道插件中的此功能比 Artifact 更好,因为它仅在本地保存数据。该工件在构建后被删除(有助于数据管理)。
-
您还可以使用复制神器插件.
复制工件需要考虑两件事:
a) 将工件归档到宿主项目中并分配权限。
b) 构建新作业后,选择“复制工件的权限”→ 允许复制工件的项目:*
c) 创建构建后操作 → 归档工件 → 要归档的文件:“选择您的文件”
d) 将所需的工件从主机复制到目标项目。
创建构建操作→从另一个项目复制工件→输入“$Project name - Host project”,该构建“例如最新成功构建”,要复制的工件“$host 项目文件夹”,目标目录“$localfolder 位置”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)