1、 前言
我们在创建jenkins任务的时候,有时候一个任务需要调用多个子任务来完成。比如,我们在编译某个镜像的时候,镜像由多个组件构成。那么我们就可以创建一个主任务以及多个子任务,主任务负责调用每个子任务,并将每个子任务的结果进行汇总,而子任务负责每个单组件的编译。
主任务和子任务的关系如下所示:
每个子任务都是独立的,有自己的工作空间。
这里需要区分几个概念:
任务与job:简单来说,我们在jenkins上可以创建多个任务,每个都执行不同的功能。任务每执行一次成为一个job,对应一个jobnum
上游任务和下游任务:如果主任务触发(即调用)了子任务,那么主任务就成为上游任务,自然子任务就可以成为下游任务。
举例如下:
可以看到下图中展示当前的任务名称为pipelinDebug, 本次任务构建的jobnum为#310,本次构建是上游任务(即主任务)触发的,对应的上游jobnum为33
2、如何在主任务中调用子任务
从上面的举例中,我们看到,上游任务parentjob触发了下游任务pipeDebug。那么具体如何实现呢?
以声明式脚本举例如下:
调用的基本格式为:
build job:"projectName", parameters:params
简单来说,只需要下游任务名称,和传递给下游任务的参数即可。
pipeline {
agent any
parameters {
string(name: 'project_name', defaultValue: 'guest_os_image/windows/cloud_app/asp', description: '项目jar名称')
string(name: 'version', defaultValue: 'test', description: '部署环境')
string(name: 'user_name', defaultValue: 'aqsc', description: '操作系统登录名')
booleanParam(name: 'dryrun', defaultValue: true)
}
stages{
stage('test') {
steps {
script {
def myjob
myjob = build job :'pipelineDebug',parameters:[string(name: 'project', value: '/asp'),
string(name: 'version', value: 'dev')]
copyArtifacts( fingerprintArtifacts: true, projectName: 'pipelineDebug', selector: specific(job.getNumber().toString()))
}
}
}
}
}
3、上游任务如何获取下游任务的结果
3.1 上游任务从下游任务中复制文件
前面提到,每个子任务之前都是独立的,上游任务和下游任务之间虽然存在调用与被调用的关系,但是它们的工作空间都是独立的,一般都是运行在不同的服务器上,彼此之间存在隔离。那么上游任务如何获取到下游任务的结果呢?
这里需要用到一个插件:Copy Artifact
如果没有安装该插件的话,需要安装之后才能使用。
安装好插件之后,下游任务只需要上传文件,上游任务只需要复制文件,这样上游任务可以可以获取下游任务的结果了。
假如下游任务生成了一个projectId.json,上游任务需要获取该json文件,实现如下:
下游任务(pipeDebug)中,增加一行代码,上传文件:
// 下游任务中上传文件
archiveArtifacts artifacts: 'projectId.json'
上游任务复制上传的文件:
def job
job = build job :'pipelineDebug',parameters:[string(name: 'project', value: '/asp'),
string(name: 'version', value: 'dev')]
// 上游任务复制文件
copyArtifacts( fingerprintArtifacts: true, projectName: 'pipelineDebug', selector: specific(job.getNumber().toString()))
通过以上的两个操作,就实现了,将下游任务中的文件projectId.json复制到了上游任务的工作区。
3.2 上游任务从下游任务复制文件的原理
上一节提到,上游任务如何从下游任务中复制文件。操作非常简单,那么现在简单说一说这个实现的原理。
要明白这个原理,只需要搞清楚两个问题:
下游任务所谓的上传文件,到底是上传到哪? 上游任务复制文件,到底是从哪复制?
这看起是两个问题,实际上是一个问题。
答案就是上传的jenkins网站上,或者说jenkin网站所在计算机。
因为不同的任务都是可以通过在jenkins网站上创建和触发的,因此如果将文件复制到jenkins所在网站上,那么自然不同的任务之间就可以共享文件了。
正因为如此,我们可以在下游任务的jenkins界面上看到上传的文件,并可以下载。如下图所示:
文章来源地址https://www.toymoban.com/news/detail-674706.html文章来源:https://www.toymoban.com/news/detail-674706.html
到了这里,关于jenkins pipeline如何在一个任务中触发另外一个任务以及从下游任务获取文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!