当前位置:网站首页>Jenkins - Copy Artifact 插件 Build 之间数据共享传递
Jenkins - Copy Artifact 插件 Build 之间数据共享传递
2022-06-28 00:15:00 【wumingxiaoyao】
引言
实现 CICD 的过程中,Jenkins Pipeline Job Build 之间需要传递共享数据,比如,有一个 Test Job 用来跑测试用例,跑完后会生成一个测试结果文件,另外一个 Report Job 是用于邮件通知测试结果,需要测试结果文件,那么就需要从 Test Job 中 拷贝测试结果文件。或则为了统计历史数据,本次 Build 的结果需要基于上次 Build 的数据添加新的数据,那么就需要拷贝上一个 Build 的结果文件。Copy Artifact Plugin 可以满足这个需求,本文就来介绍一下这个插件。
内容提要:
- Copy Artifact Plugin 简介和安装
- Copy Artifact Plugin 应用
Copy Artifact Plugin 简介和安装
Copy Artifact 应用于 Jenkins Job 拷贝 Archive the artifacts 归档文件,可以指定具体哪个 Build (例如:the last successful/stable build, by build number, or by a build parameter),也可以过滤控制拷贝哪些文件及拷贝到哪个目标文件夹。还可以从 workspace 目录拷贝文件。
这个插件不在 Jenkins 建议安装的插件列表中,所以想使用该插件,需要单独安装。
Manage Jenkins -> Plugin Manger
安装成功后,打开 Job Configure, Add build step 选项中可以看到 Copy artifacts from another project
Copy Artifact Plugin 应用
文件归档 Archive the artifacts
应用这个 Plugin 之前,需要将共享的文件进行归档处理。通过 Post-build Actions 添加 Archive the artifacts 选项。

将 workspace 目录下的文件进行归档,归档成功后的文件可以通过 URL 来访问:JenkinsURL/…JobPath/BuildNo/artifact/
Copy artifacts from another project 应用
文件归档后,就可以访问拷贝了
例如下面的配置,从目标 job 最后一个 build 归档目录中拷贝所有归档的 csv 文件到当前 Job 的 workspace 根目录下。

Build 成功后,workspace 就看到拷贝的文件了。

这里需要提醒一下,默认 Job Configure 中,会删除 workspace,如果需要保留 workspace 就不要勾选。为了节约存储空间,建议还是勾选,可通过 Arhicve the artifacts 归档一些需要的文件。
Copy artifacts from another project 详细设置
对目标 Build,有很多个选项,有些从名字就能看出来,可根据需要选择。
Specific build 选项
举个指定具体 Build No 的例子,可通过变量访问动态获取。
当然也可以通过 Pipeline Groovy 脚本设置变量。
举例:一个 Jenkins Pipeline Job,并行触发 Smoke 和 Regression Job,最后触发 Report job 邮件通知,之间参数互相传递。
#!groovy
pipeline {
options {
buildDiscarder(logRotator(numToKeepStr: '15', daysToKeepStr: '15'))
}
agent {
label "Linux1" }
parameters {
string(name: 'branch', defaultValue: 'master', description: 'example : master')
string(name: 'env', defaultValue: 'dev', description: 'example : dev')
string(name: 'project_name', defaultValue: 'Project XXX', description: 'example : Project XXX')
string(name: 'email_list', defaultValue: '[email protected]',
description: 'example : [email protected]')
}
stages{
stage('Testing'){
parallel{
stage('Smoke') {
agent {
label "Linux1" }
steps {
script {
def smoke_build = build job: 'Smoke-Job',
propagate: false,
parameters: [
string(name: 'branch', value: "${params.branch}"),
string(name: "env", value: "${params.env}")
]
smoke_full_project_name = smoke_build.getFullProjectName()
smoke_build_num = smoke_build.getNumber()
}
}
}
stage('Regression') {
agent {
label "Linux1" }
steps {
script {
def regression_build = build job: 'Reg-Job',
propagate: false,
parameters: [
string(name: 'branch', value: "${params.branch}"),
string(name: "env", value: "${params.env}")
]
regression_full_project_name = regression_build.getFullProjectName()
regression_build_num = regression_build.getNumber()
}
}
}
}
}
}
post {
always {
build job: '../Report-JOB',
parameters: [
string(name: 'smoke_job', value: "${smoke_full_project_name}"),
string(name: 'smoke_build_num', value: "${smoke_build_num}"),
string(name: 'regression_job', value: "${regression_full_project_name}"),
string(name: 'regression_build_num', value: "${regression_build_num}"),
string(name: 'branch', value: "${params.branch}"),
string(name: 'env', value: "${params.env}"),
string(name: 'project_name', value: "${params.project_name}"),
string(name: 'email_list', value: "${params.email_list}")
]
}
}
}
Specified by a build parameter 选项
先添加一个 Build selector for Copy Artifact 参数
Copy arfifacts from another project,选择 Specified by a build parameter 选项, Parameter Name 直接填上前面添加的 Build selector for Copy Artifact 参数名即可。
有关 Project Name 和 Permalink 参数,均可以从 Job 首页获取。
Project Name 就是 Full project name,可以避免 Job 之间识别问题。
Permalink 参数之前一直很困惑,后面才发现其实就是基于 Job 的固定 URL,当前 Job 首页就能看到这些信息。
例如:lastBuild 的 Permalinks
https://jenkinsURL/projectURL/lastBuild/

边栏推荐
猜你喜欢

机器学习笔记 - 时间序列作为特征

Numpy----np. meshgrid()

MapReduce elementary programming practice

声网 VQA:将实时互动中未知的视频画质用户主观体验变可知

评价——秩和比综合评价

Appium自动化测试基础— 补充:App的包名(appPackage)和启动名(appActivity)

1382. 将二叉搜索树变平衡-常规方法
![[embedded foundation] memory (cache, ram, ROM, flash)](/img/bd/d952ebd4033a993dd16cd792bb3e1e.png)
[embedded foundation] memory (cache, ram, ROM, flash)

【嵌入式基础】串口通信

Adobe Premiere基础-编辑素材文件常规操作(脱机文件,替换素材,素材标签和编组,素材启用,便捷调节不透明度,项目打包)(十七)
随机推荐
Adobe Premiere基础-编辑素材文件常规操作(脱机文件,替换素材,素材标签和编组,素材启用,便捷调节不透明度,项目打包)(十七)
Overview of drug discovery-01 overview of drug discovery
【sylixos】NEW_1 型字符驱动示例
Modular development
PV operation primitive
机器学习笔记 - 时间序列作为特征
数据库查询优化:主从读写分离及常见问题
Deep parsing of kubernetes controller runtime
嵌入式必学,硬件资源接口详解——基于ARM AM335X开发板 (上)
【sylixos】NEW_ Example of type 1 character drive
如何理解 Transformer 中的 Query、Key 与 Value
Description du format geojson (détails du format)
Cesium Color 颜色(赋值)随机颜色
Interviewer asked: Inheritance of JS
MapReduce elementary programming practice
Original | 2025 to achieve the "five ones" goal! The four products of Jiefang power are officially released
如何高效读书学习
Machine learning notes - time series as features
[embedded foundation] memory (cache, ram, ROM, flash)
自监督学习与药物发现