Jenkins技巧之同型別及不同型別之間的job呼叫及傳參
- 一、背景
- 環境準備
- 二、同型別Job間的相互呼叫
- Project Job間的相互呼叫及傳參
- Pipeline Job間的相互呼叫及傳參
- 三、不同型別Job間的相互呼叫
- Pipeline Job 呼叫Project Job并傳參
- 參考文獻
一、背景
在進入正題之前,首先介紹一下專案之間的依賴關系 構件,什么是依賴關系呢,例如,專案Test1構建是需要在專案Test2構件完成后進行,這就是依賴關系,在Jenkins上的界面來解釋,就是圖1的紅色區域選項,

環境準備
- 一臺電腦
- Jenkins環境(這個網上有,可以隨意找)
二、同型別Job間的相互呼叫
Project Job間的相互呼叫及傳參
使用本地Jenkins的小伙伴請安裝 Parameterized Trigger Plugin這個插件
為了模仿這個程序,我創建了Test1和Test2,每個專案里面的構建內容都是 windows batch commonds,輸入的命令大家可以隨意,
1. Test1 的相關配置如下
首先要知道我們要傳遞的是packageName這個引數
(1)在Test1中首先設定這個引數,
(2)選擇Trigger parameterized build on other projects
Projects to build 選擇你要觸發的專案,這里我們寫Test2,Trigger when build is 按需選擇,
predefined parameters中可以定義你要傳遞的引數,寫法如下,也可以將當前job的環境變數傳遞給另外一個專案,
這樣Test1就設定好了
2. Test2 的相關配置如下
Test2 中的配置,選擇引數化構建程序,引數名稱和剛剛寫的要一致![在這里插入圖片描述]
windows batch commonds中驗證引數是否被正確的傳遞

3. 最后我們分別來看一下兩個Job的控制臺輸出
首先是Test1的控制臺輸出,可以看到呼叫了Test 2
接著我們看下Test2的控制臺輸出

可以看出,由Test1 的Number4觸發,我們傳的packageName引數也被傳遞了過來,
Pipeline Job間的相互呼叫及傳參
下面來介紹下,pipeline代碼中如何把兩個JOB給串接起來,我們知道,在圖形界面的jenkins中的自由風格的job的設定頁眉,我們可以選擇,執行完job A之后觸發執行Job B, 那么pipeline又是如何實作這一程序呢,
環境準備
當前我的JobA 命名為ProjectA-pipeline-demo,JobB 命名為ProjectA1-pipeline-demo
1. ProjectA-pipeline-demo 的相關配置如下
這是我在本地寫的一個簡易的pipeline Job,使用build函式可以實作pipeline Job之間的呼叫和引數傳遞,
// An highlighted block
import hudson.model.*;
pipeline{
agent any
stages{
stage("Hello Pipeline") {
steps {
script {
println "Hello Pipeline!"
println env.JOB_NAME
println env.BUILD_NUMBER
}
}
}
stage("Init paramters in json") {
steps {
script {
println "read josn input file"
def packagename = "xxx"
println packagename
callTestingJob(packagename)
}
}
}
}
}
def callTestingJob(packagename){
println packagename
build job:"1", propagate: false, wait: true,parameters: [
string(name:'packagename', value: packagename)
]
}
三、不同型別Job間的相互呼叫
Pipeline Job 呼叫Project Job并傳參
上面我們學習了同型別間的相互呼叫與傳參,那么,不同型別的Job之間如何串聯起來呢,我們這里把pipeline Job命名為ProjectB-pipeline-demo,Project Job命名為1.
1. ProjectB-pipeline-demo 的相關配置如下
這是我在自己本地寫的一段簡易的pipeline代碼
// An highlighted block
import hudson.model.*;
pipeline{
agent any
stages{
stage("Hello Pipeline") {
steps {
script {
println "Hello Pipeline!"
println env.JOB_NAME
println env.BUILD_NUMBER
}
}
}
stage("Init paramters in json") {
steps {
script {
println "read josn input file"
def packagename = "xxx"
println packagename
callTestingJob(packagename)
}
}
}
}
}
def callTestingJob(packagename){
println packagename
build job:"1", propagate: false, wait: true,parameters: [
string(name:'packagename', value: packagename)
]
}
定義了一個callTestingJob函式添加呼叫Job B的代碼,傳遞packagename這個引數,
2. Project 1的相關配置如下

添加一個名字與ProjectB-pipeline-demo要傳遞引數相同的引數
用windows batch commonds測驗一下,看packeageName能不能列印出來,
3. 看下控制臺的輸出

首先是ProjectB-pipeline-demo的控制臺輸出,可以看到呼叫了1
接著我們看下1的控制臺輸出

可以看出,由ProjectB-pipeline-demo的Number 34觸發,我們傳的packageName引數也被傳遞了過來,
參考文獻
【1】https://blog.csdn.net/winter199/article/details/90604933
【2】https://blog.csdn.net/u011541946/article/details/89344002
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/216943.html
標籤:其他
