問題描述:
jenkins安裝在Linux服務器
Jenkins下執行pipeline腳本生成allure報告,報錯:
java.io.IOException: Can't find allure commandline <null>
完整報錯信息:

java.io.IOException: Can't find allure commandline <null> at ru.yandex.qatools.allure.jenkins.tools.AllureCommandlineInstallation$2.call(AllureCommandlineInstallation.java:63) at ru.yandex.qatools.allure.jenkins.tools.AllureCommandlineInstallation$2.call(AllureCommandlineInstallation.java:58) at hudson.remoting.LocalChannel.call(LocalChannel.java:45) at ru.yandex.qatools.allure.jenkins.tools.AllureCommandlineInstallation.getMajorVersion(AllureCommandlineInstallation.java:58) at ru.yandex.qatools.allure.jenkins.ReportBuilder.build(ReportBuilder.java:52) at ru.yandex.qatools.allure.jenkins.AllureReportPublisher.generateReport(AllureReportPublisher.java:312) at ru.yandex.qatools.allure.jenkins.AllureReportPublisher.perform(AllureReportPublisher.java:231) at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:80) at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:67) at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)
問題分析:
既然缺少allure commandline,那就需要安裝一個,
要配置allure-commandline ,官網上查一波,執行如下安裝命令一直報錯
$ sudo apt-add-repository ppa:yandex-qatools/allure-framework $ sudo apt-get update $ sudo apt-get install allure-commandline
查了好久也無果,因此嘗試了其他辦法,在這里記錄一下:
解決辦法:
下載allure-commandline的zip包到本地windows機器上,然后再配置臨時環境變量。
1.下載,下載allure-commandline 的zip包到本地windows機器上,下載地址:
https://registry.npmjs.org/allure-commandline/-/allure-commandline-2.13.0.tgz
2.上傳,將下載的zip包上傳到Linux機器上
使用rz命令j將下載的 allure-commandline上傳到Linux服務器上,
(1)需要注意的是,要記住當前的目錄
(2)allure環境依賴jdk1.8以上版本,如果小於1.8版本,也可以在pipeline腳本內引入臨時環境變量
(3)Linux臨時環境變量,定義可以參考:https://www.cnblogs.com/haore147/p/3633116.html
3.解壓,unzip allure-comandline-(你上傳的allure-commandline文件名)
4.再pipeline腳本內設置臨時allure環境變量,具體如下:
pipeline{ agent any environment{ allure_home = '/usr/home/ya/allure-commandline-2.13.0/dist/bin/' JAVA_HOME = '/usr/home/ya/openjdk-8' //因為allure要求jdk1.8以上,本地是1.7因此這里需要配置下jdk1.8 } stages{ stage(’deploy‘) steps{ echo '正在部署環境' } stage('Testing'){ steps{ echo ‘正在執行測試用例’ pipenv run pytest --alluredir=../results -s -v -p no:warnings } } } post{ always{ //設置allur和jdk環境變量 ,環境變量的設置在allure應該還有更好的方法,待研究。
sh''' export PATH="${JAVA_HOME}"/bin:$PATH export PATH="${allure_home}":$PATH java -version allure --version '''
script { allure includeProperties: false,jdk: '', report:'report',results:[[path:'results']] } }
這樣問題就解決了!