本次集成示意圖html
解釋:python
代碼來自IDE、SVN、GIT、xCopy 此處咱們用的IDE commit代碼到 git(State)緩存區狀態git
多人協同的話merge代碼到git(State), 不然直接 push 代碼到中央倉庫 (此處咱們用Gitee)github
若是推送成功,程序根據預先設置的webhook進行飛書機器人提醒web
jenkins有兩種方式檢測是否進行拉取代碼進行構建正則表達式
自帶的post build插件,自動檢檢測到代碼有合併 ,trigger拉取事件進行CICD流程shell
手工設置定時任務進行觸發 ,即SchemeTask定時任務json
構建成功,發送郵件到飛書郵箱 windows
飛書郵箱裏的URL地址連接打開連接到jenkins上關聯的報告,報告可否打開取決於先前在jenkins上設置的權限認證,匿名用戶配置具備查看Job 以及報告的權限瀏覽器
點擊File
點擊Settings...
彈出
點擊Plugins
輸入gitee,以下圖
點擊Search in repositories
彈出下圖
點擊Install(綠色的)
等待安裝便可
而後到從新啓動pycharm
看到上圖的Checkout from Version Control下有Gitee
說明安裝成功了
強烈建議全部的git倉庫都有一個README
, LICENSE
, .gitignore
文件
Git入門?查看 幫助 , Visual Studio / TortoiseGit / Eclipse / Xcode 下如何鏈接本站, 如何導入倉庫
Git 全局設置:
git config --global user.name "Young"
git config --global user.email "vincentsys@yeah.net"
建立 git 倉庫:
mkdir test
cd test
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://gitee.com/vincentsys/test.git
git push -u origin master
已有倉庫 ?
cd existing_git_repo
git remote add origin https://gitee.com/vincentsys/test.git
git push -u origin master
一.本地安裝GIT版本控制軟件
二.配置Git,設置用戶信息
git config --global user.name "Youngg"
git config --global user.email "vincentsys@yeah.net"
git config --list
獲取Git配置信息
注意:git config命令的--global參數,用了這個參數,表示你這臺機器上全部的Git倉庫都會使用這個配置,固然也能夠對某個倉庫指定不一樣的用戶名和Email地址。
三.Git鏈接遠程倉庫Gitee
在本地根據配置帳戶(user.name)生成密鑰
命令: ssh-keygen -t rsa -C "vincentsys@yeah.net"
在GitHub裏配置密鑰
登陸GitHub帳戶,在SSH keys裏添加sshkey(打開.ssh文件下的 id_rsa.pub文件把密鑰複製到Gitee )
檢驗是否連接上了github
The authenticity of host 'github.com (192.30.252.131)' can't be establis
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
直接yes
鏈接成功!
四.本地遠程倉庫關聯
在Gitee上建立倉庫
本地建立倉庫
本地倉庫鏈接遠程倉庫
遠程本地倉庫同步
修改本地提交遠程
@1.添加文件
@2.把文件添加到版本庫
第一步 git add 0701.txt ,命令git add
告訴Git,把文件添加到倉庫
第二步git commit -m 'first commit
命令git commit
告訴Git,把文件提交到倉庫,
-m
後面輸入的是本次提交的說明,能夠輸入任意內容,固然最好是有意義的,這樣你就能從歷史記錄裏方便地找到改動記錄。
@3.把本地推送到遠程
此時已提交到遠程
常遇問題
Gitee Jenkins Plugin 是Gitee基於 GitLab Plugin 開發的 Jenkins 插件。用於配置 Jenkins 觸發器,接受Gitee平臺發送的 WebHook 觸發 Jenkins 進行自動化持續集成或持續部署,並可將構建狀態反饋回Gitee平臺。
推送代碼到Gitee時,由配置的 WebHook 觸發 Jenkins 任務構建。
評論提交記錄觸發提交記錄對應版本 Jenkins 任務構建
提交 Pull Request 到Gitee項目時,由配置的 WebHook 觸發 Jenkins 任務構建,支持PR動做:新建,更新,接受,關閉,審查經過,測試經過。
支持 [ci-skip] 指令過濾 或者 [ci-build] 指令觸發構建。
過濾已經構建的 Commit 版本,如果分支 Push,則相同分支Push才過濾,如果 PR,則是同一個PR才過濾。
按分支名過濾觸發器。
正則表達式過濾可觸發的分支。
設置 WebHook 驗證密碼。
構建後操做可配置 PR 觸發的構建結果評論到Gitee對應的PR中。
構建後操做可配置 PR 觸發的構建成功後可自動合併對應PR。
對於 PR 相關的全部事件,若 PR 代碼衝突不可自動合併,則不觸發構建;且若配置了評論到PR的功能,則評論到 PR 提示衝突。
PR 評論可經過 WebHook 觸發構建(可用於 PR 觸發構建失敗是便於從Gitee平臺評論從新觸發構建)
支持配置 PR 不要求必須測試時過濾觸發構建。(可用於不需測試則不構建部署測試環境)
支持相同 PR 觸發構建時,取消進行中的未完成構建,進行當前構建(相同 PR 構建不排隊,多個不一樣 PR 構建仍需排隊)
PR 審查並測試經過觸發構建(可用戶觸發部署,且可配合自動合併 PR 的特性完善工做流。)
勾選觸發方式自動添加WebHook至Gitee。
在線安裝
前往 Manage Jenkins -> Manage Plugins -> Available
右側 Filter 輸入: Gitee
下方可選列表中勾選 Gitee(如列表中不存在 Gitee,則點擊 Check now 更新插件列表)
點擊 Download now and install after restart
手動安裝
從 release 列表中進入最新發行版,下載對應的 XXX.hpi 文件
前往 Manage Jenkins -> Manage Plugins -> Advanced
Upload Plugin File 中選擇剛纔下載的 XXX.hpi 點擊 Upload
後續頁面中勾選 Restart Jenkins when installation is complete and no jobs are running
前往 Jenkins -> Manage Jenkins -> Configure System -> Gitee Configuration -> Gitee connections
在 Connection name
中輸入 Gitee
或者你想要的名字
Gitee host URL
中輸入Gitee完整 URL地址: https://gitee.com
(Gitee私有化客戶輸入部署的域名)
Credentials
中如還未配置Gitee APIV5 私人令牌,點擊 Add
- > Jenkins
Domain
選擇 Global credentials
Kind
選擇 Gitee API Token
Scope
選擇你須要的範圍
Gitee API Token
輸入你的Gitee私人令牌,獲取地址:https://gitee.com/profile/personal_access_tokens
ID
, Descripiton
中輸入你想要的 ID 和描述便可。
Credentials
選擇配置好的 Gitee APIV5 Token
點擊 Advanced
,可配置是否忽略 SSL 錯誤(視您的Jenkins環境是否支持),並可設置連接測超時時間(視您的網絡環境而定)
點擊 Test Connection
測試連接是否成功,如失敗請檢查以上 3,5,6 步驟。
配置成功後如圖所示:
前往 Jenkins -> New Item , name 輸入 'Gitee Test',選擇 Freestyle project
保存便可建立構建項目。
任務全局配置中須要選擇前一步中的Gitee連接。前往某個任務(如'Gitee Test')的 Configure -> General,Gitee connection 中選擇前面所配置的Gitee連接,如圖:
前往某個任務(如'Gitee Test')的 Configure -> Source Code Management 選項卡
點擊 Git
輸入你的倉庫地址,例如
git@your.gitee.server:gitee_group/gitee_project.git
點擊 Advanced 按鈕, Name 字段中輸入 origin
, Refspec 字段輸入 +refs/heads/*:refs/remotes/origin/* +refs/pull/*/MERGE:refs/pull/*/MERGE
,注意新版jenkins再也不接受多條同時包含 * 通配符的refs描述,如只對push觸發可寫前半部分,如只對PR觸發可只寫後半段。具體可見下圖:
憑據Credentials 中請輸入 git 倉庫 https 地址對應的 用戶名密碼憑據,或者 ssh 對應的 ssh key 憑據,注意 Gitee API Token 憑據不可用於源碼管理的憑據,只用於 gitee 插件的 API 調用憑據。
Branch Specifier選項:
對於單倉庫工做流輸入: origin/${giteeSourceBranch}
對於 PR 工做流輸入: pull/${giteePullRequestIid}/MERGE
Additional Behaviours選項:
對於單倉庫工做流,若是你但願推送的分支構建前合併默認分支(發佈的分支),能夠作如下操做:
點擊 Add 下拉框
選擇 Merge before build
設置 Name of repository 爲 origin
設置 Branch to merge to 爲 ${ReleaseBranch}
即您要合併的默認分支(發佈分支)
對於 PR 工做流,Gitee服務端已經將 PR 的原分支和目標分支做了預合併,您能夠直接構建,若是目標分支不是默認分支(發佈分支),您也能夠進行上訴構建前合併。
配置如圖所示:
前往任務配置的觸發器構建: Configure -> Build Triggers 選項卡
Enabled Gitee triggers
勾選您所須要的構建觸發規則,如 Push Event
, Opened Merge Request Events
,勾選的事件會接受WebHook,觸發構建。目前支持觸發事件有:
Push Events :推送代碼事件
Commit Comment Events :評論提交記錄事件
Opened Merge Request Events :提交 PR 事件
Updated Merge Request Events :更新 PR 事件
Accepted Merge Request Events :接受/合併 PR 事件
Closed Merge Request Events :關閉 PR 事件
Approved Pull Requests : 審查經過 PR 事件
Tested Pull Requests :測試經過 PR 事件
Build Instruction Filter
:
None
: 無過濾
[ci-skip] skip build
:commit message 或者 PR 說明包含 [ci-skip]
時,跳過構建觸發。
[ci-build] trigger build
:commit message 或者 PR 說明包含 [ci-build]
時,觸發構建。
Ignore last commit has build
該選項能夠跳過已經構建過的 Commit 版本。
Cancel incomplete build on same Pull Requests
該選項在 PR 觸發構建時,會判斷是否存在相同 PR 且未完成的構建,有則取消未完成構建,再進行當前構建。
Ignore Pull Request conflicts
該選項在 PR 觸發構建時,會根據 PR 衝突狀況選擇是否進行構建。
Allowed branches
能夠配置容許構建的分支,目前支持分支名和正則表達式的方式進行過濾。
Secret Token for Gitee WebHook
該選項能夠配置 WebHook 的密碼,該密碼須要與Gitee WebHook配置的密碼一致方可觸發構建。
注意:若 PR 狀態爲不可自動合併,則不觸發構建。
前往任務配置的構建後配置: Configure -> Post-build Actions 選項卡
點擊 Add post-build action
下拉框選擇:Add note with build status on Gitee pull requests
Advanced
中能夠配置:
Add message only for failed builds :僅爲構建失敗回評到Gitee
自定義各狀態的回評內容(內容能夠引用 Jenkins 的環境變量,或者自定義的環境變量)
若開啓該功能,還可將不可自動合併的狀態回評至Gitee
點擊 Add post-build action
下拉框選擇:Accept Gitee pull request on success
進入源碼管理配置中設置的Gitee項目中,進入 管理 -> WebHooks
添加 WebHook, URL 填寫 觸發器配置:Build when a change is pushed to Gitee. Gitee webhook URL
中所示 URL,如:: http://127.0.0.1:8080/jenkins/project/fu
密碼填寫:觸發器配置第 5 點中配置的 WebHook密碼,不設密碼能夠不填
勾選 PUSH, Pull Request
Gitee的 WebHook 管理中選擇勾選了PUSH的 WebHook 點擊測試,觀察 Jenkins 任務的構建狀態
Gitee項目頁面編輯一個文件提交,觀察 Jenkins 任務的構建狀態
Gitee的 WebHook 管理中選擇勾選了 Pull Request 的 WebHook 點擊測試,觀察 Jenkins 任務的構建狀態
在Gitee項目中新建一個Pull Request,觀察 Jenkins 任務的構建狀態
目前支持環境變量見如下函數,其中不一樣的 WebHook 觸發可能致使有些變量爲空,具體請安裝插件 EnvInject Plugin,於構建中查看 Environment Variables
public Map<String, String> getBuildVariables() {
MapWrapper<String, String> variables = new MapWrapper<>(new HashMap<String, String>());
variables.put("giteeBranch", branch);
variables.put("giteeSourceBranch", sourceBranch);
variables.put("giteeActionType", actionType.name());
variables.put("giteeUserName", userName);
variables.put("giteeUserEmail", userEmail);
variables.put("giteeSourceRepoHomepage", sourceRepoHomepage);
variables.put("giteeSourceRepoName", sourceRepoName);
variables.put("giteeSourceNamespace", sourceNamespace);
variables.put("giteeSourceRepoURL", sourceRepoUrl);
variables.put("giteeSourceRepoSshUrl", sourceRepoSshUrl);
variables.put("giteeSourceRepoHttpUrl", sourceRepoHttpUrl);
variables.put("giteePullRequestTitle", pullRequestTitle);
variables.put("giteePullRequestDescription", pullRequestDescription);
variables.put("giteePullRequestId", pullRequestId == null ? "" : pullRequestId.toString());
variables.put("giteePullRequestIid", pullRequestIid == null ? "" : pullRequestIid.toString());
variables.put("giteePullRequestTargetProjectId", pullRequestTargetProjectId == null ? "" : pullRequestTargetProjectId.toString());
variables.put("giteePullRequestLastCommit", lastCommit);
variables.put("giteePushCreated", created ? "true" : "false");
variables.put("giteePushDeleted", deleted ? "true" : "false");
variables.putIfNotNull("giteePullRequestState", pullRequestState);
variables.putIfNotNull("giteeMergedByUser", mergedByUser);
variables.putIfNotNull("giteePullRequestAssignee", pullRequestAssignee);
variables.put("giteeTargetBranch", targetBranch);
variables.put("giteeTargetRepoName", targetRepoName);
variables.put("giteeTargetNamespace", targetNamespace);
variables.put("giteeTargetRepoSshUrl", targetRepoSshUrl);
variables.put("giteeTargetRepoHttpUrl", targetRepoHttpUrl);
variables.put("giteeBefore", before);
variables.put("giteeAfter", after);
variables.put("giteeBeforeCommitSha", before);
variables.put("giteeAfterCommitSha", after);
variables.put("giteeRef", ref);
variables.put("ref", ref);
variables.put("beforeSha", beforeSha);
variables.put("isTag", isTag);
variables.put("sha", sha);
variables.put("status", status);
variables.put("stages", stages);
variables.put("createdAt", createdAt);
variables.put("finishedAt", finishedAt);
variables.put("duration", buildDuration);
variables.put("jsonBody", jsonBody);
variables.put("noteBody", noteBody);
variables.putIfNotNull("giteeTriggerPhrase", triggerPhrase);
return variables;
}
打包 hpi 文件在倉庫目錄中執行: mvn package
直接運行測試執行:mvn hpi:run
安裝allure-report插件
JDK配置
參考上一章jenkins關聯jmeter自動化部署教程
git配置
參考上一章jenkins關聯jmeter自動化部署教程
allure配置
Manage Jenkisn -> 全局工具配置 ,配置以下圖所示
gitee配置
Manage Jenkins -> 系統配置,配置以下圖所示
配置全局憑證:選擇Gitee API令牌
Gitee API 令牌生成,登陸gitee ->設置->私人令牌->生成
將如上生成的令牌粘貼進入測試以下所示成功
全局屬性配置
Manage Jenkins -> 系統配置->全局屬性,配置以下圖所示
字符編碼配置
Manage Jenkins -> 系統配置->全局屬性
Mange Jenkins -> Manage Nodes and Clouds
配置jenkins 啓動文件
添加以下內容:
-Dhudson.model.DirectoryBrowserSupport.CSP= -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8
配置服務器環境變量
設置jenkins所在服務器環境變量,右鍵個人電腦→屬性→高級系統設置→環境變量,添加JAVA_TOOL_OPTIONS
CMD配置
chcp 65001
在命令行標題欄上點擊右鍵,選擇"屬性"->"字體",將字體修改成True Type字體"Lucida Console"
源碼管理
配置憑證
全部配置的憑證在首頁都可查看
構建觸發器
生成的webhook鉤子程序複製生成的密碼粘貼到Gitee 項目 ->管理 ->
構建
PATH=$PATH;D:\user\local\Python\Python38-32\Scripts
PATH=$PATH;D:\user\local\Python\Python38-32\Scripts
xcopy /y /c /h /r /s APIAutomatormation D:\user\workspace\py_workspace\APIAutomatormation\
cd /d D:/user/workspace/py_workspace/APIAutomatormation
pytest -s -q --alluredir result
rem D:\user\local\allure-2.13.8\bin\allure.bat generate result -o report --clean
rem xcopy /y/c/h/r/s report C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins\.jenkins\workspace\APIAutomatormation\report
exit 0
構建後操做:添加Allure報告
第三部分:jenkins構建APIAutomation項目點擊高級
構建後操做:郵件通知
郵件模板完整內容:
成功填寫完成,build無誤後 jenkins上會看到以下結果:
郵件成功通知:
郵件模板完整內容以下:
<!DOCTYPE html>
<html lang="en">
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">
<table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
測試郵件,無需回覆!<br/>
各位同事,你們好,如下爲${PROJECT_NAME }項目構建信息</br>
<h4><font color="red">allure報告在線查看or下載allure-report.zip用firefox離線查看,測試用例見附件</font></h4>
<h2>在線圖表測試報告:<br/>
<a HREF="${PROJECT_URL}${BUILD_NUMBER}/allure">${PROJECT_URL}${BUILD_NUMBER}/allure</a><h2>
</tr>
<tr>
<td><br/>
<b><font color="#0B610B">項目描述:${JOB_DESCRIPTION}<br></font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>項目名稱 : ${PROJECT_NAME}</li>
<li>構建編號 : 第${BUILD_NUMBER}次構建</li>
<li>SVN 版本: ${SVN_REVISION}</li>
<li>觸發緣由: ${CAUSE}</li>
<li>構建狀態: ${BUILD_STATUS}</li>
<li>構建日誌: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
<li>構建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li>
<li>工做目錄 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
<li>項目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
<li>系統allure測試報告:<a HREF="${PROJECT_URL}${BUILD_NUMBER}/allure">${PROJECT_URL}${BUILD_NUMBER}/allure</a><li>
</ul>
</td>
<tr>
<td>
<b><font color="#0B610B">構建日誌 (最後 100行):</font></b>
<hr size="2" width="100%" align="center" />
</td>
</tr>
<tr>
<td>
<textarea cols="80" rows="30" readonly="readonly" style="font-family: Courier New">${BUILD_LOG, maxLines=100}</textarea>
</td>
</tr>
${JELLY_SCRIPT}
</table>
</body>
</html>
本地排查思路:
看到有 unucodeescape 錯誤,開始覺得亂碼致使,而後在每一個文件頭加字符編碼配置# _*_ coding:utf-8 _*_
以後發現不可用
看到提示No such file or directory :在本機排查發現該文件在當前目錄存在,可是就是爲什麼找不到,懷疑是sys.path沒有將當前項目路徑添加到 PYTHONPATH當中,修改代碼以下:
execFilePath = os.path.dirname(__file__) + '/testcase'
# 追加logging
# D:\user\workspace\py_workspace\APIAutomationFramework\testcase
# execfile = execFilePath + '/test_API.py'
# execfile = r'D:/user/workspace/py_workspace/APIAutomationFramework/testcase/test_API.py'
#此處修改成絕對路徑
execfile = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'testcase', 'test_API.py')
python_install_cmd = os.path.join(sys.path[10], 'python.exe')
os.system("python " + execfile)
以後發現仍然不可用,
定位代碼logUtils類, 懷疑該行代碼有問題
查看對應的源碼解析,排查到 **os.path.dirname(__file__)**
引用相對路徑的問題,查詢結果以下
方法一:
import sys,os
os.getcwd()#而後就能夠看見結果了
方法二:
import os
os.path.dirname(os.path.realpath('__file__'))#注意:添加單引號
python中的os.path.dirname(file)的使用
(1)當"print os.path.dirname(file)"所在腳本是以完整路徑被運行的, 那麼將輸出該腳本所在的完整路徑,好比:
python d:/pythonSrc/test/test.py
那麼將輸出 d:/pythonSrc/test
(2)當"print os.path.dirname(file)"所在腳本是以相對路徑被運行的, 那麼將輸出空目錄,好比:
python test.py
那麼將輸出空字符串
python中的os.path.dirname(path)
語法:os.path.dirname(path) 功能:去掉文件名,返回目錄 如:
print(os.path.dirname('W:\Python_File\juan之購物車.py'))
#結果
#W:\Python_File
print(os.path.dirname('W:\Python_File'))
#結果
#W:\
參考博客:http://www.javashuo.com/article/p-fxxgkyic-vg.html
而後並無卵用, 再次排查
定位到多是否因爲fileConfig(p) 加載參數配置只能以windows環境下「\」 標識,查閱相關資料以下
首先,"/"左傾斜是正斜槓,""右傾斜是反斜槓,能夠記爲:除號是正斜槓通常來講對於目錄分隔符,Unix和Web用正斜槓/,Windows用反斜槓,可是如今Windows 不限制,均可使用
(一)目錄中的斜槓們
python讀文件須要輸入的目錄參數,列出如下例子:
path = r"C:\Windows\temp\readme.txt"
path1 = r"c:\windows\temp\readme.txt"
path2 = "c:\windows\temp\readme.txt"
path3 = "c:/windows/temp/readme.txt"
打開文件函數open()中的參數能夠是path也能夠是path一、path二、path3。
path:""爲字符串中的特殊字符,加上r後變爲原始字符串,則不會對字符串中的"\t"、"\r" 進行字符串轉義
path1:大小寫不影響windows定位到文件
path2:用一個""取消第二個""的特殊轉義做用,即爲"\"
path3:用正斜槓作目錄分隔符也能夠轉到對應目錄,而且在python中path3的方式也省去了反斜槓\轉義的煩惱
(二)正則表達式中的斜槓們
正則表達式匹配反斜槓"",爲何是"\\"或是 r"\"呢?
由於在正則表達式中\爲特殊符號,爲了取消它在正則表達式中的特殊意義須要加一個\就變成了\,可是問題又來了,\也是字符串中的特殊字符,因此又要分別對兩個\取消其特殊意義,即爲\\。Python中有一個原始字符串操做符,用於那些字符串中出現特殊字符,在原始字符串中,沒有轉義字符和不能打印的字符。這樣就能夠取消了\在字符串中的轉義功能,即r"\"。
然而仍然沒有卵用 ,
最後排查到最後一行代碼:
定位該行問題發現,該文件只有配置文件引用,在logging.conf 下
的確因爲該路徑被找不到,目前很疑惑根本緣由暫未找到一樣是windows操做環境,換臺機器就沒法操做,很讓人疑惑,總之更改成項目路徑好使
顯示以下狀況:
處於loading狀態,說明有數據只是無法加載出來
問題解決
其實在allure-report下index.html文件是不能直接打開的,出現頁面都是loading的狀況,這是由於直接allure報告用瀏覽器是打不開的,須要用allure命令渲染以後打開才能展現效果(allure常識)。
allure使用了兩種方式來渲染頁面。分別是 allure open 和 allure serve。前者用於在本地渲染和查看結果,後者用於在本地渲染後對外展現結果。這裏咱們使用allure open。運行命令
allure open allure-report目錄
便可自動打開瀏覽器展現渲染好的結果。這裏的allure-report爲allure generate生成的結果所在目錄。
這裏有兩兩種場景:1. 一種是無數據 2. 一種是有數據只不過處於loading狀態加載不出來
目前處於第1種結果:具體表現形式以下:
排查可能緣由:
首先明確 pytest生成的數據默認在allure-result目錄下,這裏我更改了result目錄,經過本地的IDE和cmd命令行發現沒有問題,那麼只能是jenkins windows Execute shell命令行有問題
命令行內容以下
xcopy /y /c /h /r /s APIAutomatormation D:\user\workspace\py_workspace\APIAutomatormation\
cd /d D:/user/workspace/py_workspace/APIAutomatormation
python run_main.py
exit 0
以後發現,是壓根''python run_main.py '' 壓根就沒有執行,估計是jenkins內部沒有識別python變量,手工添加python執行路徑:
$PYTHON_PATH\python.exe run_main.py
發現執行到一半又不能執行了:
定位到以下位置:
發現代碼裏又引用了相對路徑,再次添加絕對路徑進行執行該命令,console控制亂碼錯誤顯示以下:
估計問題不在這裏,再次查詢Google, 查到原來jenkins集成allure執行的時候是不須要手工執行生成報告的,查看會自動幫你作
再次更改執行命令以下:
PATH=$PATH;D:\user\local\Python\Python38-32\Scripts
PATH=$PATH;D:\user\local\Python\Python38-32\Scripts
xcopy /y /c /h /r /s APIAutomatormation D:\user\workspace\py_workspace\APIAutomatormation\
cd /d D:/user/workspace/py_workspace/APIAutomatormation
pytest -s -q --alluredir result
D:\user\local\allure-2.13.8\bin\allure.bat generate result -o report --clean
exit 0
運行以後發現仍然沒有數據,而且pytest -s -q --alluredir result
這行命令彷佛沒有執行 ,發現pytest找不到該命令,實際path已經配置了python環境變量 , 手工將pytest所在目錄也添加到path環境變量中,顯示以下:
終於pytest能夠執行了,可是report沒有結果數據,查看jenkins console發現 取的report是工做空間目錄的結果report數據 , 因而手工複製生成的報告拷貝到jenkins工做空間當中
命令行變爲以下
xcopy /y /c /h /r /s APIAutomatormation/report C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins\.jenkins\workspace\APIAutomatormation\report
然而很坑爹並無卵用
再次查看result路徑,發現其實生成了 result是有數據的,只不過沒有體如今report裏,原來jenkins 不用你手工生成報告,插件會自動幫你生成,最後一步取消 ;完整結果顯示以下:
PATH=$PATH;D:\user\local\Python\Python38-32\Scripts
PATH=$PATH;D:\user\local\Python\Python38-32\Scripts
xcopy /y /c /h /r /s APIAutomatormation D:\user\workspace\py_workspace\APIAutomatormation\
cd /d D:/user/workspace/py_workspace/APIAutomatormation
pytest -s -q --alluredir result
exit 0
完美解決
最後構建後操做生成報告的地方必定要注意 result 和 report填寫路徑要正確,不然數據仍然不會展現的
至此,該篇幅文章講解結束,以上都是博主親自在公司實踐記錄的內容,若有描述錯誤的地方還請留言批評指出。