【python】基于jenkins参数化构建的远程触发构建
一、场景
由于公司需要对内部项目管理软件提交流程进行校验,基于公司现有的jenkins,gitlab,内部研发平台等基础设施,采用jenkins参数化流水线方案,研发平台远程触发的方式进行CD流程
二、jenkins配置
2.1创建一个自由风格的流水线项目
2.2配置参数
2.3配置流水线pipeline
pipeline { agent any // 1. 参数化配置(供前端开发传递的变量) parameters { string( name: 'ITERATION_VERSION', description: '迭代版本号(如:V2.3.0)', defaultValue: '' ) string( name: 'ONES_LINK', description: 'ONES任务链接(样例:http://xxx/project/#/team/xxxxx/task/NvnAHvdWfHOATeuL)', defaultValue: '' ) } environment { ONES_ID = "" // 提取的onesid TEST_SCRIPT_PATH = "./test.py" // test.py 校验脚本路径 } options { gitLabConnection('gitlab') disableConcurrentBuilds() // 禁止并发构建 } stages { stage('初始化与清理') { steps { dir("$BUILD_NUMBER") { deleteDir() } script { echo "参数校验开始..." if (!params.ITERATION_VERSION) { error "迭代版本号(ITERATION_VERSION)不能为空" } echo "ITERATION_VERSION: ${ITERATION_VERSION}" if (!params.ONES_LINK) { error "ONES任务链接(ONES_LINK)不能为空" } echo "ONES_LINK: ${ONES_LINK}" echo "参数校验通过" } } } stage('后续流程') { steps { echo "ONES任务校验通过,执行后续上线流程..." // 此处添加实际上线流程(如构建、部署等) } } } post { success { updateGitlabCommitStatus name: 'build', state: 'success' addGitLabMRComment comment: "构建成功!日志地址:${env.BUILD_URL}console" } failure { updateGitlabCommitStatus name: 'build', state: 'failed' addGitLabMRComment comment: "构建失败!日志地址:${env.BUILD_URL}console" } always { cleanWs() } } }
配置好然后保存即可
2.4创建测试的jenkins api token
添加token并记住,不然还得重新建
下面脚本认证要用
三、调用脚本
import requests from requests.auth import HTTPBasicAuth # Jenkins配置信息 JENKINS_URL = "http://xxxxxx" # 替换为你的jenkins 地址 JOB_NAME = "your-job-name" # 替换为你的job 名称 USERNAME = "{username}" # 替换为你的Jenkins用户名 API_TOKEN = "xxxxxxxxxxxxxxxxxxxxx" # 替换为你的Jenkins API Token # 构建参数 params = { "ONES_LINK": "6YKpNQAKNVGCMGK3", # 替换为实际ONES_LINK值 "ITERATION_VERSION": "3.22.0" # 替换为实际ITERATION_VERSION值 } # 构建请求URL job_url = f"{JENKINS_URL}/job/{JOB_NAME}/buildWithParameters" try: # 发送POST请求 response = requests.post( job_url, auth=HTTPBasicAuth(USERNAME, API_TOKEN), params=params ) # 检查响应状态 if response.status_code == 201: print("Jenkins Job触发成功!") print(f"查看构建队列: {JENKINS_URL}/queue/item/{response.headers.get('Location').split('/')[-2]}/") else: print(f"触发失败,状态码: {response.status_code}") print(f"响应内容: {response.text}") except Exception as e: print(f"发生错误: {str(e)}")
四、测试
右键运行,然后去jenkins上检查即可