業務需求:提供一個API 接口給開發同事用於傳參,而後將參數再傳給測試組的對應接口。其實這個接口就起到一個數據中轉做用,接收參數 - 轉發參數。node
實施方案:在Jenkins上新建一個Job,而後引用測試組的Job做爲子任務 (最終是測試組接收數據)。這裏就涉及到"Jenkins的多個任務並串聯參數傳遞"的配置,須要用"Parameterized Trigger Plugin",下載地址: https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Pluginpython
1)新建一個Job任務,參數化構建。新建Job任務後,勾上"參數化構建",將下面9個參數定義下。json
引用子任務,而後將上面配置的參數在引用子任務這塊,將上面的9個參數從新預約下 (predefined parameters)。 注意下面幾個配置項含義:flask
Current build parameters: 當前job的參數
predefined parameters: 預約義的參數
Build on the same mode: 和當前job在同一個node上執行。
Boolean parameters: 布爾類型的值
Parameters from properties file: 從屬性文件中加載參數。api
須要注意:下游任務必須是參數化構建任務。向下遊傳遞的參數的名稱必需要和下游任務的
參數名稱同樣 或者 參數名稱是系統環境變量的參數(the list of available environment variables) ,否則下游job接收不到該參數的值。tomcat
2) 能夠手動填寫對應參數值,點擊構建,查看下執行過程和子任務那邊的構建信息,確認參數是否正確傳過去了:bash
如上,發現手動輸入的參數能夠成功接收並傳到子任務那邊了!app
3)使用Jenkins API接口,以POST方式進行傳參, 上面所參數的jenkins任務對應的API接口爲: http://******:19090/job/*****_Docker_Automated_Tests/buildWithParameters?$parametes。 在終端窗口裏使用curl -X POST方式進行訪問 (單引號或雙引號均可以),訪問後,會自動觸發jenkins界面裏對應的任務執行(注意:必須是POST方式訪問,纔會自動觸發Jenkins任務構建)!curl
# 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"post
而後觀察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 -