diff --git "a/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/21321312.PNG" "b/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/21321312.PNG" new file mode 100644 index 0000000000000000000000000000000000000000..cfc627c78b90b0fcbdf5a7c62148fb3c0a3fbddb Binary files /dev/null and "b/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/21321312.PNG" differ diff --git "a/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/33333333333333.PNG" "b/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/33333333333333.PNG" new file mode 100644 index 0000000000000000000000000000000000000000..1f962dfaf1f205a398ae309be87df3e56e92c1dd Binary files /dev/null and "b/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/33333333333333.PNG" differ diff --git "a/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/\346\211\223\345\214\205001.PNG" "b/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/\346\211\223\345\214\205001.PNG" new file mode 100644 index 0000000000000000000000000000000000000000..f781d6c11fcaae1f17bc909eb0cab2b22f1aea8e Binary files /dev/null and "b/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/\346\211\223\345\214\205001.PNG" differ diff --git "a/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/\346\211\223\345\214\205002.PNG" "b/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/\346\211\223\345\214\205002.PNG" new file mode 100644 index 0000000000000000000000000000000000000000..786ea2eadf29e7c642ac5e941e9c9bacd6178d4e Binary files /dev/null and "b/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/\346\211\223\345\214\205002.PNG" differ diff --git "a/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/\346\211\223\345\214\205003.PNG" "b/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/\346\211\223\345\214\205003.PNG" new file mode 100644 index 0000000000000000000000000000000000000000..43f8cc7ec6ca623e534e5a4762b04105b5678e9a Binary files /dev/null and "b/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/\346\211\223\345\214\205003.PNG" differ diff --git "a/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/\346\211\223\345\214\205004.PNG" "b/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/\346\211\223\345\214\205004.PNG" new file mode 100644 index 0000000000000000000000000000000000000000..bd50ccf78c47eab386cb8f29e753693e13111021 Binary files /dev/null and "b/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/\346\211\223\345\214\205004.PNG" differ diff --git "a/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/\346\211\223\345\214\205005.PNG" "b/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/\346\211\223\345\214\205005.PNG" new file mode 100644 index 0000000000000000000000000000000000000000..e0c89aa1b59c7f5c17d258f63b7a4892433af7cb Binary files /dev/null and "b/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/\346\211\223\345\214\205005.PNG" differ diff --git "a/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/\346\211\223\345\214\205006.PNG" "b/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/\346\211\223\345\214\205006.PNG" new file mode 100644 index 0000000000000000000000000000000000000000..b1137dfa40e7b8775708001d90693e219c75f55d Binary files /dev/null and "b/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/\346\211\223\345\214\205006.PNG" differ diff --git "a/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/\346\211\223\345\214\205008.PNG" "b/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/\346\211\223\345\214\205008.PNG" new file mode 100644 index 0000000000000000000000000000000000000000..cc4627335a8ebfe364cb7f046adb2b4de6ad909a Binary files /dev/null and "b/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/\346\211\223\345\214\205008.PNG" differ diff --git "a/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/\346\211\223\345\214\205009.PNG" "b/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/\346\211\223\345\214\205009.PNG" new file mode 100644 index 0000000000000000000000000000000000000000..ffe2bec1314482d584fbf144d9760547886c022c Binary files /dev/null and "b/document/\351\252\214\346\224\266\346\226\207\346\241\243/Jenkins.assets/\346\211\223\345\214\205009.PNG" differ diff --git "a/document/\351\252\214\346\224\266\346\226\207\346\241\243/devkit-pipeline\347\233\270\345\205\263\346\212\245\345\221\212\351\252\214\346\224\266\346\226\207\346\241\243.md" "b/document/\351\252\214\346\224\266\346\226\207\346\241\243/devkit-pipeline\347\233\270\345\205\263\346\212\245\345\221\212\351\252\214\346\224\266\346\226\207\346\241\243.md" new file mode 100644 index 0000000000000000000000000000000000000000..4618c0209c19ea2ec469652e6039ae9f107b1e3f --- /dev/null +++ "b/document/\351\252\214\346\224\266\346\226\207\346\241\243/devkit-pipeline\347\233\270\345\205\263\346\212\245\345\221\212\351\252\214\346\224\266\346\226\207\346\241\243.md" @@ -0,0 +1,58 @@ +
《Jenkins报告验收》
+ +#### 1.Jenkins流水线生成报告 +其中,`command to generate report`是生成报告的命令,`reportDir`是报告所在的目录,`reportFiles`是报告的文件名,`reportName`是报告的名称 + +reportFiles和reportName参数要命名要与[Jenkins流水线配置迁移、亲和门禁.md](https://gitee.com/openeuler/devkit-pipeline/blob/master/document/Jenkins安装部署/Jenkins流水线配置迁移、亲和门禁.md)文档中得命名保持一致 + +``` +stage('') { + steps { + sh 'command to generate report' + } + post { + always { + publishHTML(target: [allowMissing: false, + alwaysLinkToLastBuild: false, + keepAll : true, + reportDir : '.', + reportFiles : '*.html', + reportName : '*'] + ) + } + } + } +``` +#### 2.Jenkins master将某次构建生成得报告打包 +2.1、进入Jenkins master环境的`/var/lib/jenkins/jobs`目录 +2.2、当前目录下选择与web见面一致的流水线名称 +![](./Jenkins.assets/打包001.PNG) + +![](./Jenkins.assets/打包002.PNG) +2.3、确定流水线名称后进入`{流水线名称}/builds`目录 +2.4、选择需要查看报告的构建ID +![](./Jenkins.assets/打包003.PNG) + +![](./Jenkins.assets/打包004.PNG) +2.5、进入`{构建ID}`目录 +2.6、将该目录下的htmlreports文件可压缩成tar.gz、zip、bz等常见的压缩包格式,参考命令如下 + +``` +zip -r devkitpipe_8_htmlreports.zip htmlreports/ +# devkitpipe是流水线名称,8是构建id +``` + +![](./Jenkins.assets/打包008.PNG) + +#### 3.命令行验收报告 +执行如下命令 + +``` +# acceptance_command_line路径根据实际情况更换 +# -tool输入DevKit +# -package参数输入需要扫描的压缩包 +/devkit-pipeline/build/devkit-pipeline-v0.2/linux/acceptance_command_line -tool DevKit -package devkitpipe_8_htmlreports.zip +``` +扫描出devkit-pipeline相关报告 +![](./Jenkins.assets/打包009.PNG) +当前路径下会生成devkitpipe_8_htmlreports.html \ No newline at end of file diff --git a/tools/acceptance_command_line.py b/tools/acceptance_command_line.py new file mode 100644 index 0000000000000000000000000000000000000000..47f07090a3d0053dbb01a7c9e725987498b15772 --- /dev/null +++ b/tools/acceptance_command_line.py @@ -0,0 +1,109 @@ +import os +import zipfile +import tarfile +import argparse + + +class AcceptanceTool(object): + def devkit_acceptance_report(self, compressed_report_package): + if not os.path.exists(compressed_report_package): + print("请输入正确的报告压缩包") + return + file_ext = os.path.splitext(compressed_report_package)[1].lower() + if file_ext not in (".zip", ".gz", ".bz2"): + print("请使用以下格式的压缩包:zip、gz、bz2") + return + report_name = compressed_report_package.split("/")[-1].split("_") + devkit_pipeline_name = "" + devkit_pipeline_id = "" + if len(report_name) == 3: + devkit_pipeline_name = report_name[0] + devkit_pipeline_id = report_name[1] + decompress = {".zip": decompress_zip, ".gz": decompress_gz_bz, ".bz2": decompress_gz_bz} + current_path = os.getcwd() + print("开始解压") + file_names = decompress.get(file_ext)(compressed_report_package) + command_line_html = {"64-bit-running-mode-check.html": "64位运行模式检查", + "memory-consistency-check.html": "内存一致性检查", + "SoftwareMigrationAssessment.html": "软件迁移评估", + "byte-alignment-check.html": "字节对齐检查", "SourceCodeScanningReport.html": "源码迁移", + "compatibility_report.html": "云测工具"} + print("解压完成。") + print("流水线{}构建{}devkit-pipeline相关工具报告扫描中...".format(devkit_pipeline_name, devkit_pipeline_id)) + html_line = "" + contents = "" + for file in file_names: + if file.split("/")[-1] in command_line_html.keys(): + try: + with open(os.path.join(current_path, file), encoding="utf-8") as f: + content = f.readlines() + except UnicodeDecodeError: + with open(os.path.join(current_path, file), encoding="gbk") as f: + content = f.readlines() + if file.split("/")[-1] != "compatibility_report.html": + flag = 0 + for html_line in content: + if "Source File Path" in html_line and file != "SoftwareMigrationAssessment.html": + flag += 1 + continue + elif "Software Package Path or Name" in html_line: + flag += 1 + continue + if flag == 1: + html_line = \ + html_line.replace("""""", "").replace("""""", "").strip().split("/")[ + -1] + break + else: + for html_line in content: + if "Compatibility_Application_Start" in html_line: + str1 = html_line.find("7528") + str2 = html_line.find("542f") + html_line = html_line[str1 + 3 + 1: str2 - 2] + break + output_content = """{}: + 报告路径:{} + 被扫描软件名称:{}""".format(command_line_html.get(file.split("/")[-1]), + os.path.join(current_path, file), html_line) + print(output_content) + contents += "
  • {}
  • ".format(output_content) + + if not html_line: + print("""\033[31m未发现的devkit-pipeline相关工具报告\033[0m""") + + html_contents = '

    Acceptance report

    '.format( + contents) + with open('./{}_{}_htmlreports.html'.format(devkit_pipeline_name, devkit_pipeline_id), 'w') as f: + f.write(html_contents) + + +def decompress_zip(compressed_report_package): + with zipfile.ZipFile(compressed_report_package) as zip: + zip.extractall("./") + file_names = zip.namelist() + return file_names + + +def decompress_gz_bz(compressed_report_package): + with tarfile.open(compressed_report_package, "r") as tar: + tar.extractall(path="./") + file_names = tar.getnames() + return file_names + + +if __name__ == "__main__": + try: + parser = argparse.ArgumentParser() + parser.add_argument('-tool', help='DevKit or BoostKit') + parser.add_argument('-package', help='Compressed package') + args = parser.parse_args() + acceptance_tool = AcceptanceTool() + if args.tool == "DevKit": + acceptance_tool.devkit_acceptance_report(args.package) + elif args.tool == "BoostKit": + pass + else: + print("请输入正确的参数,如-tool Devkit 或 -tool BoostKit") + except Exception as err: + print(err) + print("请输入正确的参数") \ No newline at end of file