jenkins pipeline如何在一个任务中触发另外一个任务以及从下游任务获取文件

news2024/12/29 9:12:32

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界面上看到上传的文件,并可以下载。如下图所示:

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/546656.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PySide6/PyQT多线程之 线程池的基础概念和最佳实践

前言 在PySide6/PyQT 多线程编程中,线程池也是重要的一项知识点,线程池是一种高效管理和调度多个线程执行任务的方式。 通过结合线程池(QThreadPool)和任务类(QRunnable),可以轻松地实现并发执行…

【分布族谱】正态分布和卡方分布的关系

文章目录 正态分布卡方分布卡方分布的极限 正态分布 正态分布,最早由棣莫弗在二项分布的渐近公式中得到,而真正奠定其地位的,应是高斯对测量误差的研究,故而又称Gauss分布。。测量是人类定量认识自然界的基础,测量误差…

FFmpeg命令实战(上)

标题 1.FFmpeg命令行环境搭建2.ffmpeg,ffplay和ffprobe的区别3.ffmpeg处理流程4.ffmpeg命令分类查询5.ffplay播放控制6.ffplay命令选项 1.FFmpeg命令行环境搭建 1.到达FFmpeg的github,选择下载需要的版本,这里以windows举例。 这里有两个压缩包,ffmpeg-master-lat…

Flutter 笔记 | Flutter Native 插件开发 (Android)

oh, 我亲爱的朋友,很高兴你来到了这里!既然来了,那么就让我们在这篇糟糕的烂文章中,一起来学习一下,如何在一个糟糕的 Flutter 混合应用中开发一个糟糕的 Android Native 烂插件吧!😑 首先&…

研报精选230519

目录 【行业230519头豹研究院】2023年中国产后康复设备行业词条报告 【行业230519山西证券】有色金属行业周报:锂价快速回升,释放锂电行业复苏信号 【行业230519头豹研究院】2023年中国氢能重卡行业词条报告 【个股230519西南证券_森麒麟】腾飞的高端轮胎…

网页外包开发的测试方法及工具

网页开发的软件项目完成代码开发后需要进行全面的测试,这是正规的软件公司开发软件项目必须要做的工作,这方面有不少好用的工具供大家使用。今天和大家分享这方面的知识,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件…

Elasticsearch实战之处理邮件附件进行进行内容全文检索

目录 一、系统环境和软件要求 二、软件说明 三、定义文本抽取管道(pipeline) 四、建立索引设置文档结构映射 五、插入文档 六、查询文档 需求是将本地邮件内容以及PDF,EXCEL,WORD等附件内容进行处理,保存到ES数据库,实现邮件…

【I2C 通信的工作原理是什么?Arduino 和 I2C 教程】

【I2C 通信的工作原理是什么?Arduino 和 I2C 教程】 1. 概述2. I2C 的工作原理3. I2C 协议4. 例程5. Arduino I2C 代码在本教程中,我们将了解 I2C 通信协议的工作原理,我们还将使用 Arduino 板和使用该协议的传感器制作一个实际示例。您可以观看以下视频或阅读下面的书面教程…

chatgpt赋能Python-python3虚拟环境搭建

Python3虚拟环境搭建:介绍和步骤 Python是一门非常强大的编程语言,因此在许多不同类型的项目中都广泛使用。但是,不同项目可能需要使用不同版本的Python库和依赖项。这就是使用Python的虚拟环境的重要性,可以避免不同项目之间的冲…

「实验记录」MIT 6.824 Raft Lab2B Log Replication

#Lab2B - Log Replication I. SourceII. My CodeIII. MotivationIV. SolutionS1 - leader上任即初始化S2 - leader发送AppendEntriesS3 - follower接收AppendEntriesS4 - leader收到AppendEntries 回信S5 - candidate选举限制S6 - defs.go约定俗成和实现Start() V. Result I. S…

yolov7结构改进策略解析

论文链接:https://arxiv.org/abs/2207.02696 代码链接:https://github.com/WongKinYiu/yolov7 具体分割如何训练,请参考我之前的博客论文: https://blog.csdn.net/qq_41920323/article/details/129464115?spm1001.2014.3001.5502…

联用多个插件可以让 GPT-4 的能力更加强大,实现更加复杂的操作

🚀 联用多个插件可以让 GPT-4 的能力更加强大,实现更加复杂的操作。 联用多个插件可以让 GPT-4 的能力更加强大,实现更加复杂的操作。 不过,使用插件和联网功能也有一些要注意的地方。 首先是安全性问题,特别是像购…

Burpsuite模块—-Intruder模块详解

一、简介 Burp Intruder是一个强大的工具,用于自动对Web应用程序自定义的攻击,Burp Intruder 是高度可配置的,并被用来在广范围内进行自动化攻击。你可以使用 Burp Intruder 方便地执行许多任务,包括枚举标识符,获取有…

Kali-linux密码在线破解

为了使用户能成功登录到目标系统,所以需要获取一个正确的密码。在Kali中,在线破解密码的工具很多,其中最常用的两款分别是Hydra和Medusa。本节将介绍使用Hydra和Medusa工具实现密码在线破解。 8.1.1 Hydra工具 Hydra是一个相当强大的暴力密…

浅谈分布式事物解决方案

目录 背景 1 XA规范分布式事物方案 1.1 俩阶段提交(2PC) 1.2 三阶段提交(3PC) 2 补偿事务(TCC) 3 可靠消息最终一致性方案 4 可靠消息最终一致性方案 5 SAGA事物 6 Seata AT 模式 背景 分布式事务出现…

使用Git-lfs上传超过100m的大文件到GitHub

文章目录 1. 安装 git-lfs2. 在Git中安装git-ifs3. 找到工程中的所有大文件4.执行完这行命令,项目目录下会生成文件 .gitattributes,此时Git push将 .gitattributes 提交到远程仓库。 5. 需要注意的事 1. 安装 git-lfs Git Large File Storage | Git La…

Day44【动态规划】完全背包、518.零钱兑换 II、377.组合总和 Ⅳ

完全背包 文章讲解 视频讲解 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将物品装入背包里的最大价值 完全背包和01背包问题…

F103ZET6使用FSMC和HAL点亮ILI9341

前言 将标准库下的ILI9341驱动移植到使用CubeMX生成的HAL库环境,并成功运行。 一、STM32CubeMX生成框架 (一)配置RCC、SYS和时钟树 参见常规配置。 (二)配置FSMC 1、原理图引脚定义 LCD8080接口使用的引脚主要分…

【数据结构】线性表 ⑤ ( 双循环链表 | 双循环链表特点 | 双循环链表插入操作处理 | 代码示例 - 使用 Java 实现 双循环链表 )

文章目录 一、双循环链表二、双循环链表特点三、双循环链表插入操作处理四、代码示例 - 使用 Java 实现 双循环链表 一、双循环链表 " 双循环链表 " 是 在 单循环链表 的基础上 , 在每个 节点 中 , 新增一个 指针 , 指向 该节点 的 前驱节点 ; 双向循环链表 每个 节…

头歌计算机组成原理实验—运算器设计(8)第8关:乘法流水线设计

第8关:乘法流水线设计 实验目的 学生掌握运算流水线基本概念,理解将复杂运算步骤细分成子过程的思想,能够实现简单的乘法运算流水线。 视频讲解 实验内容 在 Logisim 中打开 alu.circ 文件,在6位补码阵列乘法器中利用5位阵列乘…