Jenkins参数化构建 - (多任务并串联参数传递)
业务需求:提供一个API 接口给开发同事用于传参,然后将参数再传给测试组的对应接口。其实这个接口就起到一个数据中转作用,接收参数 - 转发参数。
实施方案:在Jenkins上新建一个Job,然后引用测试组的Job作为子任务 (最终是测试组接收数据)。这里就涉及到"Jenkins的多个任务并串联参数传递"的配置,需要用"Parameterized Trigger Plugin",下载地址: https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin
1)新建一个Job任务,参数化构建。新建Job任务后,勾上"参数化构建",将下面9个参数定义下。
引用子任务,然后将上面配置的参数在引用子任务这块,将上面的9个参数重新预定下 (predefined parameters)。 注意下面几个配置项含义:
Current build parameters: 当前job的参数
predefined parameters: 预定义的参数
Build on the same mode: 和当前job在同一个node上执行。
Boolean parameters: 布尔类型的值
Parameters from properties file: 从属性文件中加载参数。
需要注意:下游任务必须是参数化构建任务。向下游传递的参数的名称必须要和下游任务的
参数名称一样 或者 参数名称是系统环境变量的参数(the list of available environment variables) ,不然下游job接收不到该参数的值。
2) 可以手动填写对应参数值,点击构建,查看下执行过程和子任务那边的构建信息,确认参数是否正确传过去了:
如上,发现手动输入的参数可以成功接收并传到子任务那边了!
3)使用Jenkins API接口,以POST方式进行传参, 上面所参数的jenkins任务对应的API接口为: http://******:19090/job/*****_Docker_Automated_Tests/buildWithParameters?$parametes。 在终端窗口里使用curl -X POST方式进行访问 (单引号或双引号都可以),访问后,会自动触发jenkins界面里对应的任务执行(注意:必须是POST方式访问,才会自动触发Jenkins任务构建)!
# curl -X POST "http://*******:19090/job/******_Docker_Automated_Tests/buildWithParameters?AGILE_COMPILE_BRANCH=master&AGILE_MODULE_NAME=******/XPS/testflow&AGILE_PRODUCT_PATH=application-d7ea6a96a9999a96bbb1e80b4289622c206a65c3-f7909295624b82a7a5fa27c3fec3554c.tar.gz_f7909295624b82a7a5fa27c3fec3554c&AGILE_COMPILE_BUILD_ID=528721&AGILE_REVISION=d7ea6a96a9999a96bbb1e80b4289622c206a65c3&AGILE_RELEASE_VERSION=1.1.5.100&AGILE_TRIGGER_USER=test&Deploy_Env=D&Deploy_App=tomcat_8899"
然后观察jenkins上对应任务执行过程(需要稍等一小会儿)
发现通过post方式访问这个api接口也是可以自动触发并能成功传参!所以就可以将下面这个Jenkins API接口给开发同事,用于调用这个参数进行上面相关参数的推送了。
http://******:19090/job/*****_Docker_Automated_Tests/buildWithParameters?AGILE_COMPILE_BRANCH=编译分支&AGILE_MODULE_NAME=模块名称&AGILE_PRODUCT_PATH=生产路径&AGILE_COMPILE_BUILD_ID=编译构建ID&AGILE_REVISION=修订版本&AGILE_RELEASE_VERSION=发布版本&AGILE_TRIGGER_USER=触发器用户&Deploy_Env=部署环境&Deploy_App=部署应用程序 (这就是给开发的API接口地址)
另外注意一点:上面在使用curl -X POST方式访问Jenkins API接口的时候,默认没有跟Jenkins的用户和密码,默认是使用anonymous用户,即匿名用户对这个参数化构建的Job任务有执行权限的。如果anonymous没有对Job任务有执行权限,就需要在访问Jenkins API接口的时候跟上用户名和密码信息, 即"--user username:password", 如下:
写一个python的api接口,用于传参
1)先安装flask [root@k8s-master01 ~]# yum -y install epel-release [root@k8s-master01 ~]# yum install python-pip [root@k8s-master01 ~]# pip install Flask [root@k8s-master01 ~]# flask --version Python 2.7.5 Flask 1.1.1 Werkzeug 0.15.5 2)编写脚本 [root@k8s-master01 ~]# cd myproject/ [root@k8s-master01 myproject]# ls app.py run.sh [root@k8s-master01 myproject]# cat run.sh #!/bin/bash cd ./ export FLASK_APP=app.py flask run -h 0.0.0.0 [root@k8s-master01 myproject]# cat app.py from flask import Flask, request import json app = Flask(__name__) @app.route('/send', methods=['GET']) def send(): try: print(request.args) #tmp = request.url #AGILE_COMPILE_BRANCH = request.args.get("AGILE_COMPILE_BRANCH") except Exception as e: print(e) return 'ok' 3)执行接口服务 [root@k8s-master01 myproject]# nohup sh run.sh & [root@k8s-master01 myproject]# lsof -i:5000 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME flask 5391 root 3u IPv4 25337407 0t0 TCP *:commplex-main (LISTEN) 4)另打开一个终端窗口,通过这个api接口进行传参 api接口地址为: http://localhost:5000/send?$parametes 命令为(有多少参数就传多少): [root@k8s-master01 myproject]# curl "http://localhost:5000/send?&AGILE_COMPILE_BRANCH=master&AGILE_MODULE_NAME=XPS/testflow&AGILE_PRODUCT_PATH=application-d7ea6a96a9999a96bbb1e80b4289622c206a65c3-f7909295624b82a7a5fa27c3fec3554c.tar.gz&AGILE_COMPILE_BUILD_ID=528721&AGILE_REVISION=1.1.5.100&AGILE_REVISION=d7ea6a96a9999a96bbb1e80b4289622c206a65c3&AGILE_TRIGGER_USER=test&SYSTEM_CODE=cmp&Deploy_Env=F&Deploy_App=tomcat" 5)然后在查看接口日志,发现参数已经传过来了 [root@k8s-master01 myproject]# cat nohup.out * Serving Flask app "app.py" * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) 127.0.0.1 - - [01/Aug/2019 13:45:58] "GET /send?&AGILE_COMPILE_BRANCH=master&AGILE_MODULE_NAME=XPS/testflow&AGILE_PRODUCT_PATH=application-d7ea6a96a9999a96bbb1e80b4289622c206a65c3-f7909295624b82a7a5fa27c3fec3554c.tar.gz&AGILE_COMPILE_BUILD_ID=528721&AGILE_REVISION=1.1.5.100&AGILE_REVISION=d7ea6a96a9999a96bbb1e80b4289622c206a65c3&AGILE_TRIGGER_USER=test&SYSTEM_CODE=cmp&Deploy_Env=F&Deploy_App=tomcat HTTP/1.1" 200 -