業務需求:提供一個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 -