1.功能
“Trigger/call builds on other project” 功能是 Jenkins 中的一个特性,允许您在某个项目的构建过程中触发或调用另一个项目的构建。
当您在 Jenkins 中启用了 “Trigger/call builds on other project” 功能并配置了相应的触发条件后,当主项目构建成功或满足触发条件时,Jenkins 将自动触发所配置的目标项目的构建。
这种功能通常用于创建复杂的构建流水线或构建依赖关系。例如,您可以将多个项目串联起来,使得一个项目的构建成功触发下一个项目的构建,以实现整个软件开发、测试和部署流程的自动化。
通过 “Trigger/call builds on other project” 功能,您可以创建复杂的构建逻辑,并且将不同的项目之间形成依赖关系,以便实现更高级的自动化和集成。
2.携带参数的两种办法
在 “Triggering Options”(触发选项)中,查找 “Parameters”(参数)部分。选择 “Predefined parameters”(预定义参数)或 “Current build parameters”(当前构建参数),具体取决于您希望如何传递参数。
如果选择了 “Predefined parameters”(预定义参数),您可以按照以下格式提供参数:
PARAM_NAME=${VALUE}
其中,PARAM_NAME 是 B 项目中定义的参数名称,VALUE 是您希望传递给 B 项目的实际值。例如:PARAM_NAME=example_value
如果选择了 “Current build parameters”(当前构建参数),那么 A 项目中定义的所有构建参数都将自动传递给 B 项目。
在参数字段中,使用 Shell 脚本来获取当前时间并将其赋值给参数。例如,要将当前日期以 “YYYY-MM-DD” 格式传递给 B 项目,您可以使用以下命令:
PARAM_NAME=$(date +%F)
这将使用 date 命令获取当前日期,并将其格式化为 “YYYY-MM-DD” 并赋值给 PARAM_NAME 参数。
如果您还想添加其他参数,您可以使用换行符 \n 将它们分隔开,如下所示:
PARAM_NAME=$(date +%F)\nANOTHER_PARAM=value
3.实际使用案例
项目A,会传递VERSION选项参数和预定义参数DIRNAMES
项目B
import java.text.SimpleDateFormat
import java.util.Date
pipeline {
agent none
environment {
createdir = getVERSION()
dirname = "${params.DIRNAMES}"
}
stages {
stage('初始化') {
agent { label "10.101.11.55" }
steps {
script {
wrap([$class: 'BuildUser']) {
buildName "#${BUILD_NUMBER}_${BUILD_USER}"
}
}
cleanWs()
}
}
stage('上传到文档管理系统') {
agent { label "10.101.11.55" }
steps {
script {
sh'''
#软链接
#cd $WORKSPACE/
#ln -s /jenkins/product/${dirname}/${createdir} ./
#ls $WORKSPACE/
echo $createdir
echo $dirname
'''
}
}
}
}
}
def getVERSION() {
if (params.VERSION && !params.VERSION.trim().isEmpty()){
return params.VERSION
} else {
def dateFormat = new SimpleDateFormat("yyyyMMdd")
return dateFormat.format(new Date())
}
}
def uploadFolder(url,folder,dirname){
def files = findFiles(glob: "$folder")
for(file in files){
echo file.path
def path = file.path;
path = path.replace(file.name,"");
echo path
sh 'curl -i -X POST "' + "$url" + '" -H "Content-Type: multipart/form-data" -F "file=@' + file.path + '" -F "user=test" -F "userName=test" -F "path=${dirname}/' + path + '" '
}
}