From 913a7a2c6f81e584f8202e916478ec9f2a0fc462 Mon Sep 17 00:00:00 2001
From: shi <2965713873@qq.com>
Date: Sat, 16 Mar 2024 16:27:59 +0800
Subject: [PATCH 1/3] =?UTF-8?q?=E2=80=9Cgitlab=E3=80=81Jenkins=E9=97=A8?=
=?UTF-8?q?=E7=A6=81=E6=96=87=E6=A1=A3=E2=80=9D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...62\345\222\214\351\227\250\347\246\201.md" | 524 ++++++++++++++++++
...62\345\222\214\351\227\250\347\246\201.md" | 246 ++++++++
2 files changed, 770 insertions(+)
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/Jenkins\346\265\201\346\260\264\347\272\277\351\205\215\347\275\256\350\277\201\347\247\273\343\200\201\344\272\262\345\222\214\351\227\250\347\246\201.md"
create mode 100644 "document/gitlab\345\256\211\350\243\205\351\203\250\347\275\262/Gitlab\346\265\201\346\260\264\347\272\277\351\205\215\347\275\256\350\277\201\347\247\273\343\200\201\344\272\262\345\222\214\351\227\250\347\246\201.md"
diff --git "a/document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/Jenkins\346\265\201\346\260\264\347\272\277\351\205\215\347\275\256\350\277\201\347\247\273\343\200\201\344\272\262\345\222\214\351\227\250\347\246\201.md" "b/document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/Jenkins\346\265\201\346\260\264\347\272\277\351\205\215\347\275\256\350\277\201\347\247\273\343\200\201\344\272\262\345\222\214\351\227\250\347\246\201.md"
new file mode 100644
index 0000000..028d6d6
--- /dev/null
+++ "b/document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/Jenkins\346\265\201\346\260\264\347\272\277\351\205\215\347\275\256\350\277\201\347\247\273\343\200\201\344\272\262\345\222\214\351\227\250\347\246\201.md"
@@ -0,0 +1,524 @@
+
《鲲鹏 DevKit CLI 与 Jenkins 集成部署指导手册》
+
+
+
+
+
+[TOC]
+
+------
+
+## 一、Jenkins Pipeline 中集成 DevKit CLI
+
+**命令行各任务模块命令解释:**
+
+应用迁移包含软件迁移评估、源码迁移和系统迁移,其命令行返回值如下:
+
+\##### 命令行状态码含义
+| 状态码 | 触发情况 |
+| ------ | ------------------------------------------ |
+| 0 | 无扫描建议 |
+| 1 | 扫描结果只存在建议项 |
+| 2 | 扫描任务出现Ctrl+C(SIGINT(2)) |
+| 3 | 扫描结果超时 |
+| 4 | 扫描命令错误 |
+| 5 | 扫描结果存在必须修改项 |
+| 15/20 | 扫描任务出现Ctrl+Z SIGTERM(15)/SIGTSTP(20) |
+
+- ##### 软件迁移评估:
+
+
+```groovy
+# devkit porting pkg-mig -i 待扫描软件包 -r 输出报告格式
+# 示例 devkit porting pkg-mig -i impala-2.9.0+cdh5.12.1+0-1.cdh5.12.1.p0.3.el7.x86_64.rpm -r html
+
+stage('software-migration-assessment') {
+ steps {
+ echo '====== 软件迁移评估 ======'
+ sh '''
+ /usr/bin/rm -rf ./*.html
+ devkit porting pkg-mig -i impala-2.9.0+cdh5.12.1+0-1.cdh5.12.1.p0.3.el7.x86_64.rpm -r html
+ mv ./pkg-mig*.html ./SoftwareMigrationAssessment.html
+ '''
+ }
+ post {
+ always {
+ publishHTML(target: [allowMissing: false,
+ alwaysLinkToLastBuild: false,
+ keepAll : true,
+ reportDir : '.',
+ reportFiles : 'SoftwareMigrationAssessment.html',
+ reportName : 'SoftwareMigrationAssessment Report']
+ )
+ }
+ }
+ }
+```
+
+具体参数如下
+
+| 参数 | 参数选项 | 参数说明 |
+| ---------------- | ----------------- | ------------------------------------------------------------ |
+| -i/--input | package_path | 必选参数。待扫描的软件包路径,若存在多个扫描路径需使用英文逗号分割。例如:/home/test1.jar, /home/test2.jar。 |
+| -t/--target-os | target-os | 可选参数。待扫描的目标操作系统。 |
+| -o/--output | output_path | 可选参数。报告存放路径。报告默认存放在当前执行路径下,名称默认为“特性名称_时间戳”。 |
+| --set-timeout | time | 可选参数。任务超时时间。默认无超时时间,任务将持续执行直到结束。 |
+| -l/--log-level | 0,1,2,3 | 可选参数。任务日志级别。0(DEBUG)、1(INFO)、2(WARNING)、3(ERROR),默认为1(INFO)。 |
+| -r/--report-type | all,json,html,csv | 可选参数。扫描报告的格式。默认为all,即默认生成json、html、csv三种报告 |
+
+- ##### 源码迁移:
+
+
+```groovy
+ # devkit porting src-mig -i 待扫描源码的文件夹或压缩包路径 -c 源码的构建命令 -r 输出报告格式
+ # 示例 devkit porting src-mig -i ./wtdbg2 -c make -r html
+
+stage('source-code-migration') {
+ steps {
+ echo '====== 源码迁移 ======'
+ sh '''
+ /usr/bin/rm -rf ./*.html
+ devkit porting src-mig -i ./wtdbg2 -c make -r html
+ mv ./src-mig*.html ./SourceCodeScanningReport.html
+ '''
+ }
+ post {
+ always {
+ publishHTML(target: [allowMissing: false,
+ alwaysLinkToLastBuild: false,
+ keepAll : true,
+ reportDir : '.',
+ reportFiles : 'SourceCodeScanningReport.html',
+ reportName : 'Source Code Scanning Report']
+ )
+ }
+ }
+ }
+
+```
+
+具体参数如下
+
+| 参数 | 参数选项 | 参数说明 |
+| --------------------- | --------------------------------- | ------------------------------------------------------------ |
+| -i/--input-path | path | 必选参数。待扫描源码的文件夹或压缩包路径,若存在多个扫描路径需使用英文逗号分割。例如:/home/test1,/home/test2。 |
+| -c/--cmd | cmd | 必选参数。源码的构建命令。例如:make all。 |
+| -s/--source-type | c,c++,asm,fortran,go, interpreted | 可选参数。待扫描源码类型。 |
+| -t/--target-os | target-os | 可选参数。迁移的目标操作系统。如果用户不输入则默认为当前操作系统。例如:bclinux7.7。 |
+| -p/--compiler | gcc,clang | 可选参数。编译器版本。默认为选定目标操作系统的默认GCC版本。例如:gcc7.8.5 |
+| -f/--fortran-compiler | flang-ver | 可选参数。fortran代码的编译器版本。默认为flang2.5.0.1。 |
+| -b/--build-tool | make,cmake,automake,go | 可选参数。构建工具。默认make,只有在--source-type中没有c/c++/asm/fortran并且包含go时可以选go。 |
+| -o/--output | /home/test/report | 可选参数。扫描报告的存放地址和文件名称。默认存放在当前执行路径下,名称默认为功能名_时间戳_uuid(4位)。 |
+| --set-timeout | time | 可选参数。命令行的超时时间。默认无超时时间。 |
+| -l/--log-level | 0,1,2,3 | 可选参数。设置日志级别。0(DEBUG)、1(INFO)、2(WARNING)、3(ERROR),默认为1(INFO)。 |
+| -r/--report-type | all,json,html,csv | 可选参数。 扫描报告的格式。默认为all,选择all的时候json、csv和html报告都会生成。 |
+| --ignore | /opt/ignore.json | 可选参数。屏蔽扫描规则信息。 |
+
+-
+ ##### 系统迁移:
+
+```groovy
+# devkit porting sys-mig
+# 示例 devkit porting sys-mig -c stnt -cf porting/resources/sysmig default.conf
+
+stage('system-migration') {
+ steps {
+ echo '====== 系统迁移 ======'
+ sh '''
+ /usr/bin/rm -rf ./*.html
+ devkit porting sys-mig -c stnt -cf porting/resources/sysmig default.conf
+ mv ./sbom*.html ./SystemMigration.html
+ '''
+ }
+ post {
+ always {
+ publishHTML(target: [allowMissing: false,
+ alwaysLinkToLastBuild: false,
+ keepAll : true,
+ reportDir : '.',
+ reportFiles : 'SystemMigration.html',
+ reportName : 'SystemMigration Report']
+ )
+ }
+ }
+ }
+```
+
+具体参数如下(均为可选参数)
+
+| 参数 | 参数选项 | 说明 |
+| ------------------- | -------------------- | ------------------------------------------------------------ |
+| -c/--command | stmt/sbom | 收集信息的模式。stmt:收集台账信息。sbom:收集sbom信息。 |
+| -cf/--config | configure_file_path | 输入参数配置文件路径。 |
+| -d/--directory | scan_path | 输入扫描文件目录,支持输入多个目录,多个目录间以空格分隔。 |
+| -t/--template | stmt_template_path | stmt模式参数,输入台账扫描结果模板路径,默认按照程序内置模板生成扫描结果。 |
+| -o/--output | report_dir | 报告输出目录,默认为二进制所在report目录。 |
+| -f/--format | html/json | sbom模式参数,输入生成报告格式,支持选择html、json格式,可以选择多个报告格式,默认为HTML格式,多个报告格式以空格间隔。 |
+| -e/--exclude-fields | version/checkOutPath | sbom模式参数,表示需要隐藏的参数信息,可选参数范围:version和checkOutPath,支持同时选择。version表示成分版本号checkOutPath表示成分检出路径,多个参数信息以空格间隔。 |
+| -v/--version | - | 展示程序版本信息,无输入参数。 |
+| -h/--help | - | 帮助查询,无输入参数。 |
+| -l/--log-level | 0,1,2,3 | 日志等级,可选参数:0(DEBUG)、1(INFO)、2(WARNING)、3(ERROR),默认为1(INFO)。 |
+
+- ##### 64位运行模式检查:
+
+```groovy
+# devkit advisor mode-check -i 待扫描的软件包路径
+# 示例 devkit advisor mode-check -i /opt/DevKit/testcase/affinity/precheck/test005
+
+stage('64-bit-running-mode-check') {
+ steps {
+ echo '====== 64位运行模式 ======'
+ sh '''
+ /usr/bin/rm -rf ./*.html
+ devkit advisor mode-check -i /opt/DevKit/testcase/affinity/precheck/test005
+ mv ./mode-check*.html ./64-bit-running-mode-check.html
+ '''
+ }
+ post {
+ always {
+ publishHTML(target: [allowMissing: false,
+ alwaysLinkToLastBuild: false,
+ keepAll : true,
+ reportDir : '.',
+ reportFiles : '64-bit-running-mode-check.html',
+ reportName : '64-bit-running-mode-check Report']
+ )
+ }
+ }
+ }
+
+```
+
+具体参数如下
+
+| 参数 | 参数选项 | 参数说明 |
+| ---------------- | ----------------- | ------------------------------------------------------------ |
+| -i/--input | package_path | 必选参数。待扫描的软件包路径,若存在多个扫描路径需使用英文逗号分割。例如:/home/test1.jar, /home/test2.jar。 |
+| -o/--output | output_path | 可选参数。报告存放路径。报告默认存放在当前执行路径下,名称默认为“特性名称_时间戳”。 |
+| --set-timeout | time | 可选参数。任务超时时间。默认无超时时间,任务将持续执行直到结束。 |
+| -l/--log-level | 0,1,2,3 | 可选参数。日志等级,0(DEBUG)、1(INFO)、2(WARNING)、3(ERROR),默认为1(INFO)。 |
+| -r/--report-type | all,json,html,csv | 可选参数。扫描报告的格式。默认为all,即默认生成json、html、csv三种报告。 |
+
+- ##### 字节对齐检查:
+
+```groovy
+# devkit advisor byte-align -i 待扫描的软件包路径 -c 源码构建命令 -b 构建工具
+# 示例 devkit advisor byte-align -i /opt/DevKit/wtdbg2-2.5 -c make -b make
+
+stage('byte-alignment-check') {
+ steps {
+ echo '====== 字节对齐检查 ======'
+ sh '''
+ /usr/bin/rm -rf ./*.html
+ devkit advisor byte-align -i /opt/DevKit/wtdbg2-2.5 -c make -b make
+ mv ./byte-align*.html ./byte-alignment-check.html
+ '''
+ }
+ post {
+ always {
+ publishHTML(target: [allowMissing: false,
+ alwaysLinkToLastBuild: false,
+ keepAll : true,
+ reportDir : '.',
+ reportFiles : 'byte-alignment-check.html',
+ reportName : 'byte-alignment-check Report']
+ )
+ }
+ }
+ }
+```
+
+具体参数如下
+
+| 参数 | 参数选项 | 参数说明 |
+| ---------------- | ------------------- | ------------------------------------------------------------ |
+| -i/--input | package_path | 必选参数。待扫描的软件包路径,若存在多个扫描路径需使用英文逗号分割。例如:/home/test1.jar, /home/test2.jar。 |
+| -c/--cmd | cmd | 必选参数。源码构建命令。在服务器中正常执行的构建命令,命令中如有空格,要使用单引号包住。 |
+| -b/--build-tool | make,cmake,automake | 必选参数。构建工具。当前工具支持make,cmake,automake,默认选项为make。 如-c make -b make 、-c cmake -b cmake 、-c make -b automake |
+| -o/--output | output_path | 可选参数。报告存放路径。报告默认存放在当前执行路径下,名称默认为“特性名称_时间戳”。 |
+| --set-timeout | time | 可选参数。任务超时时间。默认无超时时间,任务将持续执行直到结束。 |
+| -l/--log-level | 0,1,2,3 | 可选参数。日志等级,0(DEBUG)、1(INFO)、2(WARNING)、3(ERROR),默认为1(INFO)。 |
+| -r/--report-type | all,json,html,csv | 可选参数。扫描报告的格式。默认为all,即默认生成json、html、csv三种报告。 |
+
+-
+ ##### 内存一致性检查:
+
+```groovy
+ # devkit advisor mem-cons -i BC文件对应的源码文件路径 -f BC文件路径
+ # 示例 devkit advisor mem-cons -i /opt/DevKit/testcase/affinity/weak_cons/test-mulbc_sort -f /opt/DevKit/testcase/affinity/weak_cons/bc_file
+
+stage('memory-consistency-check') {
+ agent {
+ label 'Linux_aarch64'
+ }
+ steps {
+ echo '====== 内存一致性检查 ======'
+ sh '''
+ /usr/bin/rm -rf ./*.html
+ devkit advisor mem-cons -i /opt/DevKit/testcase/affinity/weak_cons/test-mulbc_sort -f /opt/DevKit/testcase/affinity/weak_cons/bc_file
+ mv ./mem-cons*.html ./memory-consistency-check.html
+ '''
+ }
+ post {
+ always {
+ publishHTML(target: [allowMissing: false,
+ alwaysLinkToLastBuild: false,
+ keepAll : true,
+ reportDir : '.',
+ reportFiles : 'memory-consistency-check.html',
+ reportName : 'memory-consistency-check Report']
+ )
+ }
+ }
+ }
+```
+
+具体参数如下
+
+| 参数 | 参数选项 | 参数说明 |
+| ---------------- | ----------------- | ------------------------------------------------------------ |
+| -i/--input | package_path | 必选参数。BC文件对应的源码文件路径。例如:/home/test |
+| -f/--bc-file | path | 必选参数。BC文件路径,该路径下必须存在BC文件。例如:/home/testbc |
+| --autofix | true/false | 可选参数。是否生成编译器配置文件。默认为false。 |
+| --autofix-dir | path | 可选参数。编译器配置文件的存放地址。默认生成在工具目录下的源码文件夹下,使用--autofix且参数必须为true时才能生效。 |
+| -o/--output | output_path | 可选参数。报告存放路径。报告默认存放在当前执行路径下,名称默认为“特性名称_时间戳”。 |
+| --set-timeout | time | 可选参数。任务超时时间。默认无超时时间,任务将持续执行直到结束。 |
+| -l/--log-level | 0,1,2,3 | 可选参数。日志等级,0(DEBUG)、1(INFO)、2(WARNING)、3(ERROR),默认为1(INFO)。 |
+| -r/--report-type | all,json,html,csv | 可选参数。扫描报告的格式。默认为all,即默认生成json、html、csv三种报告。 |
+
+- ##### 向量化检查:
+
+```groovy
+# devkit advisor vec-check -i BC文件对应的源码文件路径 -f BC文件路径 -c 源码的构建命令
+# 示例 devkit advisor vec-check -i /opt/DevKit/testcase/affinity/vec/simple -f /opt/DevKit/testcase/affinity/vec/BCfiles -c make
+
+stage('vectorized-check') {
+ steps {
+ echo '====== 内存一致性检查 ======'
+ sh '''
+ /usr/bin/rm -rf ./*.html
+ devkit advisor vec-check -i /opt/DevKit/testcase/affinity/vec/simple -f /opt/DevKit/testcase/affinity/vec/BCfiles -c make
+ mv ./vec-check*.html ./vectorized-check.html
+ '''
+ }
+ post {
+ always {
+ publishHTML(target: [allowMissing: false,
+ alwaysLinkToLastBuild: false,
+ keepAll : true,
+ reportDir : '.',
+ reportFiles : 'vectorized-check.html',
+ reportName : 'vectorized-check Report']
+ )
+ }
+ }
+ }
+```
+
+具体参数如下
+
+| 参数 | 参数选项 | 参数说明 |
+| ---------------- | ----------------- | ------------------------------------------------------------ |
+| -i/--input | package_path | 必选参数。BC文件对应的源码文件路径。例如:/home/test |
+| -f/--bc-file | path | 必选参数。BC文件路径,该路径下必须存在BC文件。例如:/home/testbc |
+| -c/--cmd | cmd | 必选参数。源码的构建命令。例如:make all |
+| -p/--compiler | gcc,clang | 可选参数。编译器。默认为clang。例如:gcc。 |
+| -o/--output | output_path | 可选参数。报告存放路径。报告默认存放在当前执行路径下,名称默认为“特性名称_时间戳”。 |
+| --set-timeout | time | 可选参数。任务超时时间。默认无超时时间,任务将持续执行直到结束。 |
+| -l/--log-level | 0,1,2,3 | 可选参数。日志等级,0(DEBUG)、1(INFO)、2(WARNING)、3(ERROR),默认为1(INFO)。 |
+| -r/--report-type | all,json,html,csv | 可选参数。扫描报告的格式。默认为all,即默认生成json、html、csv三种报告。 |
+| --sve-enable | true,false | 可选参数。是否启用sve。默认不开启。 |
+
+
+
+### 1. 示例在Jenkins中配置命令行创建 Pipeline 任务:
+
+> 下文使用到的 Jenkins Pipeline 样例脚本『有关 `devkit` 命令行用法,请使用以下命令查看 HELP 手册: `devkit --help`』
+>
+> ```groovy
+> pipeline {
+> agent any
+> options {
+> timeout(time: 1, unit: 'HOURS')
+> }
+> parameters {
+> string(name: 'GIT_URL', defaultValue: 'https://github.com/ruanjue/wtdbg2.git', description: '--> git url <--')
+> string(name: 'GIT_BRANCH', defaultValue: 'v2.5', description: '--> code branch <--')
+> string(name: 'GIT_TARGET_DIR_NAME', defaultValue: 'wtdbg2', description: '--> code branch <--')
+> }
+> stages{
+> stage('Git Clone Code') {
+> agent {
+> label 'Linux_aarch64'
+> }
+> steps {
+> echo '====== 获取源码 ======'
+> checkout scmGit(branches: [[name: "${params.GIT_BRANCH}"]],
+> browser: github("${params.GIT_URL}"),
+> extensions: [[$class: 'RelativeTargetDirectory',
+> relativeTargetDir: "${params.GIT_TARGET_DIR_NAME}"],
+> cleanBeforeCheckout(deleteUntrackedNestedRepositories: true)],
+> userRemoteConfigs: [[url: "${params.GIT_URL}"]])
+> }
+> }
+> stage('PARALLEL BUILD') {
+> parallel {
+> stage('Kunpeng') {
+> agent {
+> label 'Linux_aarch64'
+> }
+> stages{
+> stage('source-code-migration') {
+> steps {
+> echo '====== 源码迁移 ======'
+> sh '''
+> /usr/bin/rm -rf ./*.html
+> devkit porting src-mig -i ./wtdbg2 -c make -r html
+> mv ./src-mig*.html ./SourceCodeScanningReport.html
+> '''
+> }
+> post {
+> always {
+> publishHTML(target: [allowMissing: false,
+> alwaysLinkToLastBuild: false,
+> keepAll : true,
+> reportDir : '.',
+> reportFiles : 'SourceCodeScanningReport.html',
+> reportName : 'Source Code Scanning Report']
+> )
+> }
+> }
+> }
+> stage('Affinity Scanning') {
+> steps {
+> echo '====== 构建亲和 ======'
+> sh '''
+> devkit advisor constr-check -i ./wtdbg2 -c make -r html
+> mv ./constr-check*.html ./ConstrCheckReport.html
+> '''
+> }
+> post {
+> always {
+> publishHTML(target: [allowMissing: false,
+> alwaysLinkToLastBuild: false,
+> keepAll : true,
+> reportDir : '.',
+> reportFiles : 'ConstrCheckReport.html',
+> reportName : 'Affinity Scanning Report']
+> )
+> }
+> }
+> }
+> }
+> }
+> }
+> }
+> }
+> }
+> ```
+
+
+
+----
+
+### 2. 执行任务
+
+
+
+----
+
+### 3. 查看任务执行状态
+
+- ##### 传统方式查看任务执行状态
+
+ 
+
+- ##### 现代方式查看任务执行状态
+
+ 
+
+
+----
+
+### 4. FAQ
+
+当使用 Jenkins **Snippet Generator** 的 **checkout: Check out from version control** 模板时出现下图错误时,可尝试使用以下解决方案。
+
+
+
+```shell
+#=====================================================================================================================#
+# Git 忽略证书校验
+git config --global http.sslVerify false
+#---------------------------------------------------------------------------------------------------------------------#
+# 如果您的环境设置了系统网络代理,建议执行以下命令
+git config --global http.proxy "${http_proxy}" && git config --global https.proxy "${http_proxy}"
+#---------------------------------------------------------------------------------------------------------------------#
+# 拷贝当前用户目录下 .gitconfig 文件到 /var/lib/jenkins/
+cp "${HOME}"/.gitconfig /var/lib/jenkins/
+#---------------------------------------------------------------------------------------------------------------------#
+# 修改文件的所属用户及用户组为 jenkins
+chown jenkins:jenkins /var/lib/jenkins/.gitconfig
+#=====================================================================================================================#
+```
+
+------
+
+## 二、查阅报告
+
+### 1. 查阅报告
+
+ **①** 传统方式
+
+
+
+ **②** 现代方式
+
+
+
+- ##### 源码迁移报告
+
+ 
+
+- ##### 构建亲和分析报告
+
+ 
+
+----
+
+### 2. FAQ
+
+> 相关问题根因参考链接:
+>
+> [https://www.jenkins.io/doc/book/security/user-content/](https://www.jenkins.io/doc/book/security/user-content/)
+> [https://www.jenkins.io/doc/book/security/configuring-content-security-policy/](https://www.jenkins.io/doc/book/security/configuring-content-security-policy/)
+> [https://content-security-policy.com/](https://content-security-policy.com/)
+
+**当查看报告时,如下图样式显示异常时,可采用以下方案解决此问题。**
+
+
+
+- ##### 临时解决方案(重启后失效)
+
+ ```shell
+ System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'none'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' 'unsafe-inline'; data:;")
+ ```
+
+ 
+
+- ##### 永久解决方案(重启后设置继续生效)
+
+ ```shell
+ #=====================================================================================================================#
+ # 将 /usr/lib/systemd/system/jenkins.service 文件中 Environment="JAVA_OPTS=-Djava.awt.headless=true" 选项进行替换
+ sed -i 's/Environment="JAVA_OPTS=-Djava.awt.headless=true"/Environment="JAVA_OPTS=-Djava.awt.headless=true -Dhudson.model.DirectoryBrowserSupport.CSP=\\"default-src \x27none\x27; script-src \x27self\x27 \x27unsafe-inline\x27; style-src \x27self\x27 \x27unsafe-inline\x27; img-src \x27self\x27 \x27unsafe-inline\x27; data:;\\""/g' /usr/lib/systemd/system/jenkins.service
+ #---------------------------------------------------------------------------------------------------------------------#
+ # 重新加载 systemd 管理器配置
+ systemctl daemon-reload
+ #---------------------------------------------------------------------------------------------------------------------#
+ # 重启 Jenkins 服务
+ systemctl restart jenkins.service
+ #=====================================================================================================================#
+ ```
+
+------
diff --git "a/document/gitlab\345\256\211\350\243\205\351\203\250\347\275\262/Gitlab\346\265\201\346\260\264\347\272\277\351\205\215\347\275\256\350\277\201\347\247\273\343\200\201\344\272\262\345\222\214\351\227\250\347\246\201.md" "b/document/gitlab\345\256\211\350\243\205\351\203\250\347\275\262/Gitlab\346\265\201\346\260\264\347\272\277\351\205\215\347\275\256\350\277\201\347\247\273\343\200\201\344\272\262\345\222\214\351\227\250\347\246\201.md"
new file mode 100644
index 0000000..868f9a2
--- /dev/null
+++ "b/document/gitlab\345\256\211\350\243\205\351\203\250\347\275\262/Gitlab\346\265\201\346\260\264\347\272\277\351\205\215\347\275\256\350\277\201\347\247\273\343\200\201\344\272\262\345\222\214\351\227\250\347\246\201.md"
@@ -0,0 +1,246 @@
+《gitlab流水线迁移、亲和命令行配置》
+
+##### 命令行状态码含义
+| 状态码 | 触发情况 |
+| ------------ | ------------ |
+| 0 | 无扫描建议 |
+| 1 | 扫描结果只存在建议项 |
+| 2 | 扫描任务出现Ctrl+C(SIGINT(2)) |
+| 3 | 扫描结果超时 |
+| 4 | 扫描命令错误 |
+| 5 | 扫描结果存在必须修改项 |
+| 15/20 | 扫描任务出现Ctrl+Z SIGTERM(15)/SIGTSTP(20) |
+
+##### 软件迁移评估:
+
+```
+stages:
+ - build
+ - migrating-applications
+
+software-migration-assessment:
+ stage: migrating-applications
+ tags:
+ - kunpeng_builder # 对应gitlab-runner注册时的标签,可选择多个
+ script:
+ - echo '====== 软件迁移评估 ======'
+ - devkit porting pkg-mig -i 待扫描软件包 -r html || [ $? -eq 1 ] && echo 'Warning:扫描报告包含建议项'
+
+ # 示例 devkit porting pkg-mig -i impala-2.9.0+cdh5.12.1+0-1.cdh5.12.1.p0.3.el7.x86_64.rpm -r html || [ $? -eq 1 ] && echo 'Warning:扫描报告包含建议项'
+ artifacts:
+ paths:
+ - pkg-mig*.html # 文件后缀.html根据-r参数配置,也可配置为 pkg-mig*.*
+
+
+```
+具体参数如下
+
+| 参数 | 参数选项 | 参数说明 |
+| ------------ | ------------ | ------------ |
+| -i/--input | package_path | 必选参数。待扫描的软件包路径,若存在多个扫描路径需使用英文逗号分割。例如:/home/test1.jar, /home/test2.jar。 |
+| -t/--target-os | target-os | 可选参数。待扫描的目标操作系统。|
+| -o/--output | output_path | 可选参数。报告存放路径。报告默认存放在当前执行路径下,名称默认为“特性名称_时间戳”。 |
+| --set-timeout | time | 可选参数。任务超时时间。默认无超时时间,任务将持续执行直到结束。 |
+| -l/--log-level | 0,1,2,3 | 可选参数。任务日志级别。0(DEBUG)、1(INFO)、2(WARNING)、3(ERROR),默认为1(INFO)。 |
+| -r/--report-type | all,json,html,csv | 可选参数。扫描报告的格式。默认为all,即默认生成json、html、csv三种报告 |
+
+##### 源码迁移:
+
+```
+stages:
+ - build
+ - migrating-applications
+
+source-code-migration:
+ stage: migrating-applications
+ tags:
+ - kunpeng_builder # 对应gitlab-runner注册时的标签,可选择多个
+ script:
+ - echo '====== 源码迁移 ======'
+ - devkit porting src-mig -i 待扫描源码的文件夹或压缩包路径 -c 源码的构建命令 -r html || [ $? -eq 1 ] && echo 'Warning:扫描报告包含建议项'
+
+ # 示例 devkit porting src-mig -i wtdbg2-2.5 -c make -r html || [ $? -eq 1 ] && echo 'Warning:扫描报告包含建议项'
+ artifacts:
+ paths:
+ - src-mig*.html # 文件后缀.html根据-r参数配置,也可配置为 src-mig*.*
+
+```
+具体参数如下
+| 参数 | 参数选项 | 参数说明 |
+| ------------ | ------------ | ------------ |
+| -i/--input-path | path | 必选参数。待扫描源码的文件夹或压缩包路径,若存在多个扫描路径需使用英文逗号分割。例如:/home/test1,/home/test2。 |
+| -c/--cmd | cmd | 必选参数。源码的构建命令。例如:make all。 |
+| -s/--source-type | c,c++,asm,fortran,go, interpreted | 可选参数。待扫描源码类型。 |
+| -t/--target-os | target-os | 可选参数。迁移的目标操作系统。如果用户不输入则默认为当前操作系统。例如:bclinux7.7。 |
+| -p/--compiler | gcc,clang | 可选参数。编译器版本。默认为选定目标操作系统的默认GCC版本。例如:gcc7.8.5 |
+| -f/--fortran-compiler | flang-ver | 可选参数。fortran代码的编译器版本。默认为flang2.5.0.1。 |
+| -b/--build-tool | make,cmake,automake,go | 可选参数。构建工具。默认make,只有在--source-type中没有c/c++/asm/fortran并且包含go时可以选go。 |
+| -o/--output | /home/test/report | 可选参数。扫描报告的存放地址和文件名称。默认存放在当前执行路径下,名称默认为功能名_时间戳_uuid(4位)。 |
+| --set-timeout | time | 可选参数。命令行的超时时间。默认无超时时间。 |
+| -l/--log-level | 0,1,2,3 | 可选参数。设置日志级别。0(DEBUG)、1(INFO)、2(WARNING)、3(ERROR),默认为1(INFO)。 |
+| -r/--report-type | all,json,html,csv | 可选参数。 扫描报告的格式。默认为all,选择all的时候json、csv和html报告都会生成。 |
+| --ignore | /opt/ignore.json | 可选参数。屏蔽扫描规则信息。 |
+
+
+##### 系统迁移:
+```
+stages:
+ - build
+ - migrating-applications
+
+system-migration:
+ stage: migrating-applications
+ tags:
+ - kunpeng_builder # 对应gitlab-runner注册时的标签,可选择多个
+ script:
+ - echo '====== 系统迁移 ======'
+ - devkit porting sys-mig -o ./ || [ $? -eq 1 ] && echo 'Warning:扫描报告包含建议项'
+
+ # 示例 devkit porting sys-mig -c stnt -cf porting/resources/sysmig default.conf -o ./ || [ $? -eq 1 ] && echo 'Warning:扫描报告包含建议项'
+ artifacts:
+ paths:
+ - s*.*
+
+
+```
+具体参数如下(均为可选参数)
+| 参数 | 参数选项 | 说明 |
+| ------------ | ------------ | ------------ |
+| -c/--command | stmt/sbom | 收集信息的模式。stmt:收集台账信息。sbom:收集sbom信息。 |
+| -cf/--config | configure_file_path | 输入参数配置文件路径。 |
+| -d/--directory | scan_path | 输入扫描文件目录,支持输入多个目录,多个目录间以空格分隔。 |
+| -t/--template | stmt_template_path | stmt模式参数,输入台账扫描结果模板路径,默认按照程序内置模板生成扫描结果。 |
+| -o/--output | report_dir | 报告输出目录,默认为二进制所在report目录。 |
+| -f/--format | html/json | sbom模式参数,输入生成报告格式,支持选择html、json格式,可以选择多个报告格式,默认为HTML格式,多个报告格式以空格间隔。 |
+| -e/--exclude-fields | version/checkOutPath | sbom模式参数,表示需要隐藏的参数信息,可选参数范围:version和checkOutPath,支持同时选择。version表示成分版本号checkOutPath表示成分检出路径,多个参数信息以空格间隔。 |
+| -v/--version | - | 展示程序版本信息,无输入参数。 |
+| -h/--help | - | 帮助查询,无输入参数。 |
+| -l/--log-level | 0,1,2,3 | 日志等级,可选参数:0(DEBUG)、1(INFO)、2(WARNING)、3(ERROR),默认为1(INFO)。 |
+
+##### 64位运行模式检查:
+```
+stages:
+ - build
+ - affinity-analysis
+
+64-bit-running-mode-check:
+ stage: affinity-analysis
+ tags:
+ - kunpeng_builder # 对应gitlab-runner注册时的标签,可选择多个
+ script:
+ - echo '====== 64位运行模式检查 ======'
+ - devkit advisor mode-check -i 待扫描的软件包路径 -r html
+
+ # 示例 devkit advisor mode-check -i /opt/DevKit/testcase/affinity/precheck/test005 -r html
+ artifacts:
+ paths:
+ - mode-check*.html # 文件后缀.html根据-r参数配置,也可配置为 mode-check*.*
+
+
+```
+具体参数如下
+| 参数 | 参数选项 | 参数说明 |
+| ------------ | ------------ | ------------ |
+| -i/--input | package_path | 必选参数。待扫描的软件包路径,若存在多个扫描路径需使用英文逗号分割。例如:/home/test1.jar, /home/test2.jar。 |
+| -o/--output | output_path | 可选参数。报告存放路径。报告默认存放在当前执行路径下,名称默认为“特性名称_时间戳”。 |
+| --set-timeout | time | 可选参数。任务超时时间。默认无超时时间,任务将持续执行直到结束。 |
+| -l/--log-level | 0,1,2,3 | 可选参数。日志等级,0(DEBUG)、1(INFO)、2(WARNING)、3(ERROR),默认为1(INFO)。 |
+| -r/--report-type | all,json,html,csv | 可选参数。扫描报告的格式。默认为all,即默认生成json、html、csv三种报告。 |
+
+##### 字节对齐检查:
+```
+stages:
+ - build
+ - affinity-analysis
+
+byte-alignment-check:
+ stage: affinity-analysis
+ tags:
+ - kunpeng_builder # 对应gitlab-runner注册时的标签,可选择多个
+ script:
+ - echo '====== 字节对齐检查 ======'
+ - devkit advisor byte-align -i 待扫描的软件包路径 -c 源码构建命令 -b 构建工具 -r html
+
+ # 示例 devkit advisor byte-align -i /opt/DevKit/wtdbg2-2.5 -c make -b make -r html
+ artifacts:
+ paths:
+ - byte-align*.html # 文件后缀.html根据-r参数配置,也可配置为 byte-align*.*
+
+```
+具体参数如下
+| 参数 | 参数选项 | 参数说明 |
+| ------------ | ------------ | ------------ |
+| -i/--input | package_path | 必选参数。待扫描的软件包路径,若存在多个扫描路径需使用英文逗号分割。例如:/home/test1.jar, /home/test2.jar。 |
+| -c/--cmd | cmd | 必选参数。源码构建命令。在服务器中正常执行的构建命令,命令中如有空格,要使用单引号包住。 |
+| -b/--build-tool | make,cmake,automake | 必选参数。构建工具。当前工具支持make,cmake,automake,默认选项为make。 如-c make -b make 、-c cmake -b cmake 、-c make -b automake |
+| -o/--output | output_path | 可选参数。报告存放路径。报告默认存放在当前执行路径下,名称默认为“特性名称_时间戳”。 |
+| --set-timeout | time | 可选参数。任务超时时间。默认无超时时间,任务将持续执行直到结束。 |
+| -l/--log-level | 0,1,2,3 | 可选参数。日志等级,0(DEBUG)、1(INFO)、2(WARNING)、3(ERROR),默认为1(INFO)。 |
+| -r/--report-type | all,json,html,csv | 可选参数。扫描报告的格式。默认为all,即默认生成json、html、csv三种报告。 |
+
+
+##### 内存一致性检查:
+```
+stages:
+ - build
+ - affinity-analysis
+
+memory-consistency-check:
+ stage: affinity-analysis
+ tags:
+ - kunpeng_builder # 对应gitlab-runner注册时的标签,可选择多个
+ script:
+ - echo '====== 内存一致性检查 ======'
+ - devkit advisor mem-cons -i BC文件对应的源码文件路径 -f BC文件路径 -r html
+
+ # 示例 devkit advisor mem-cons -i /opt/DevKit/testcase/affinity/weak_cons/test-mulbc_sort -f /opt/DevKit/testcase/affinity/weak_cons/bc_file -r html
+ artifacts:
+ paths:
+ - mem-cons*.html # 文件后缀.html根据-r参数配置,也可配置为 mem-cons*.*
+```
+具体参数如下
+| 参数 | 参数选项 | 参数说明 |
+| ------------ | ------------ | ------------ |
+| -i/--input | package_path | 必选参数。BC文件对应的源码文件路径。例如:/home/test |
+| -f/--bc-file | path | 必选参数。BC文件路径,该路径下必须存在BC文件。例如:/home/testbc |
+| --autofix | true/false | 可选参数。是否生成编译器配置文件。默认为false。 |
+| --autofix-dir | path | 可选参数。编译器配置文件的存放地址。默认生成在工具目录下的源码文件夹下,使用--autofix且参数必须为true时才能生效。 |
+| -o/--output | output_path | 可选参数。报告存放路径。报告默认存放在当前执行路径下,名称默认为“特性名称_时间戳”。 |
+| --set-timeout | time | 可选参数。任务超时时间。默认无超时时间,任务将持续执行直到结束。 |
+| -l/--log-level | 0,1,2,3 | 可选参数。日志等级,0(DEBUG)、1(INFO)、2(WARNING)、3(ERROR),默认为1(INFO)。 |
+| -r/--report-type | all,json,html,csv | 可选参数。扫描报告的格式。默认为all,即默认生成json、html、csv三种报告。 |
+
+##### 向量化检查:
+```
+stages:
+ - build
+ - affinity-analysis
+
+vectorized-check:
+ stage: affinity-analysis
+ tags:
+ - kunpeng_builder # 对应gitlab-runner注册时的标签,可选择多个
+ script:
+ - echo '====== 向量化检查 ======'
+ - devkit advisor vec-check -i BC文件对应的源码文件路径 -f BC文件路径 -c 源码的构建命令 -r html
+
+ # 示例 devkit advisor vec-check -i /opt/DevKit/testcase/affinity/vec/simple -f /opt/DevKit/testcase/affinity/vec/BCfiles -c make -r html
+ artifacts:
+ paths:
+ - vec-check*.html # 文件后缀.html根据-r参数配置,也可配置为 vec-check*.*
+
+```
+具体参数如下
+| 参数 | 参数选项 | 参数说明 |
+| ------------ | ------------ | ------------ |
+| -i/--input | package_path | 必选参数。BC文件对应的源码文件路径。例如:/home/test |
+| -f/--bc-file | path | 必选参数。BC文件路径,该路径下必须存在BC文件。例如:/home/testbc |
+| -c/--cmd | cmd | 必选参数。源码的构建命令。例如:make all |
+| -p/--compiler | gcc,clang | 可选参数。编译器。默认为clang。例如:gcc。 |
+| -o/--output | output_path | 可选参数。报告存放路径。报告默认存放在当前执行路径下,名称默认为“特性名称_时间戳”。 |
+| --set-timeout | time | 可选参数。任务超时时间。默认无超时时间,任务将持续执行直到结束。 |
+| -l/--log-level | 0,1,2,3 | 可选参数。日志等级,0(DEBUG)、1(INFO)、2(WARNING)、3(ERROR),默认为1(INFO)。 |
+| -r/--report-type | all,json,html,csv | 可选参数。扫描报告的格式。默认为all,即默认生成json、html、csv三种报告。 |
+| --sve-enable | true,false | 可选参数。是否启用sve。默认不开启。 |
+
+
--
Gitee
From 431dbdfc1f48a449086bb40a33909aa4b895083a Mon Sep 17 00:00:00 2001
From: shi <2965713873@qq.com>
Date: Sat, 16 Mar 2024 16:31:00 +0800
Subject: [PATCH 2/3] =?UTF-8?q?jenkins=E5=9B=BE=E7=89=87?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../FAQ_JENKINS_CONTENT_SECURITY_POLICY01.png" | Bin 0 -> 93694 bytes
.../FAQ_JENKINS_CONTENT_SECURITY_POLICY02.png" | Bin 0 -> 123684 bytes
.../FAQ_JENKINS_GIT_SSL_VERIFY.png" | Bin 0 -> 114695 bytes
...\345\214\226\350\256\276\347\275\25601.png" | Bin 0 -> 82255 bytes
...\345\214\226\350\256\276\347\275\25602.png" | Bin 0 -> 70544 bytes
...\345\214\226\350\256\276\347\275\25603.png" | Bin 0 -> 39269 bytes
...\345\214\226\350\256\276\347\275\25605.png" | Bin 0 -> 43240 bytes
...\345\214\226\350\256\276\347\275\25606.png" | Bin 0 -> 52903 bytes
...346\216\245\345\244\261\350\264\245FAQ.png" | Bin 0 -> 211928 bytes
...55\345\274\200\350\212\202\347\202\271.png" | Bin 0 -> 86191 bytes
...47\350\241\214\347\212\266\346\200\201.png" | Bin 0 -> 100037 bytes
...45\351\230\205\346\212\245\345\221\212.png" | Bin 0 -> 121857 bytes
...\272Pipeline\344\273\273\345\212\24101.png" | Bin 0 -> 88808 bytes
...\272Pipeline\344\273\273\345\212\24102.png" | Bin 0 -> 138759 bytes
...\272Pipeline\344\273\273\345\212\24103.png" | Bin 0 -> 141577 bytes
...TMLPublisher\346\217\222\344\273\26601.png" | Bin 0 -> 77059 bytes
...TMLPublisher\346\217\222\344\273\26602.png" | Bin 0 -> 90855 bytes
...5SafeRestart\346\217\222\344\273\26602.png" | Bin 0 -> 90040 bytes
...\347\202\271\350\256\276\347\275\25601.png" | Bin 0 -> 71781 bytes
...\347\202\271\350\256\276\347\275\25603.png" | Bin 0 -> 67838 bytes
...\347\202\271\350\256\276\347\275\25604.png" | Bin 0 -> 49146 bytes
...47\350\241\214\344\273\273\345\212\241.png" | Bin 0 -> 81500 bytes
...06\346\236\220\346\212\245\345\221\212.png" | Bin 0 -> 53367 bytes
...55\346\215\256\345\237\237\344\270\213.png" | Bin 0 -> 74049 bytes
...\345\207\255\346\215\256\345\237\23701.png" | Bin 0 -> 68071 bytes
...\345\207\255\346\215\256\345\237\23702.png" | Bin 0 -> 54428 bytes
...01\347\247\273\346\212\245\345\221\212.png" | Bin 0 -> 106081 bytes
...47\350\241\214\347\212\266\346\200\201.png" | Bin 0 -> 169157 bytes
...45\351\230\205\346\212\245\345\221\212.png" | Bin 0 -> 58199 bytes
...TMLPublisher\346\217\222\344\273\26601.png" | Bin 0 -> 267895 bytes
...TMLPublisher\346\217\222\344\273\26602.png" | Bin 0 -> 118923 bytes
...TMLPublisher\346\217\222\344\273\26603.png" | Bin 0 -> 86205 bytes
32 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/FAQ_JENKINS_CONTENT_SECURITY_POLICY01.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/FAQ_JENKINS_CONTENT_SECURITY_POLICY02.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/FAQ_JENKINS_GIT_SSL_VERIFY.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/Jenkins\345\210\235\345\247\213\345\214\226\350\256\276\347\275\25601.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/Jenkins\345\210\235\345\247\213\345\214\226\350\256\276\347\275\25602.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/Jenkins\345\210\235\345\247\213\345\214\226\350\256\276\347\275\25603.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/Jenkins\345\210\235\345\247\213\345\214\226\350\256\276\347\275\25605.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/Jenkins\345\210\235\345\247\213\345\214\226\350\256\276\347\275\25606.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/Jenkins\345\267\245\344\275\234\350\212\202\347\202\271\350\277\236\346\216\245\345\244\261\350\264\245FAQ.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/\344\270\264\346\227\266\346\226\255\345\274\200\350\212\202\347\202\271.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/\344\274\240\347\273\237\346\226\271\345\274\217\346\237\245\347\234\213\344\273\273\345\212\241\346\211\247\350\241\214\347\212\266\346\200\201.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/\344\274\240\347\273\237\346\226\271\345\274\217\346\237\245\351\230\205\346\212\245\345\221\212.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/\345\210\233\345\273\272Pipeline\344\273\273\345\212\24101.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/\345\210\233\345\273\272Pipeline\344\273\273\345\212\24102.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/\345\210\233\345\273\272Pipeline\344\273\273\345\212\24103.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/\345\234\250\347\272\277\345\256\211\350\243\205HTMLPublisher\346\217\222\344\273\26601.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/\345\234\250\347\272\277\345\256\211\350\243\205HTMLPublisher\346\217\222\344\273\26602.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/\345\256\211\350\243\205SafeRestart\346\217\222\344\273\26602.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/\345\267\245\344\275\234\350\212\202\347\202\271\350\256\276\347\275\25601.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/\345\267\245\344\275\234\350\212\202\347\202\271\350\256\276\347\275\25603.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/\345\267\245\344\275\234\350\212\202\347\202\271\350\256\276\347\275\25604.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/\346\211\247\350\241\214\344\273\273\345\212\241.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/\346\236\204\345\273\272\344\272\262\345\222\214\345\210\206\346\236\220\346\212\245\345\221\212.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/\346\267\273\345\212\240\345\207\255\346\215\256\345\210\260DevKit\345\207\255\346\215\256\345\237\237\344\270\213.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/\346\267\273\345\212\240\351\262\262\351\271\217DevKitJenkinsCI\346\217\222\344\273\266\345\207\255\346\215\256\345\237\23701.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/\346\267\273\345\212\240\351\262\262\351\271\217DevKitJenkinsCI\346\217\222\344\273\266\345\207\255\346\215\256\345\237\23702.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/\346\272\220\347\240\201\350\277\201\347\247\273\346\212\245\345\221\212.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/\347\216\260\344\273\243\346\226\271\345\274\217\346\237\245\347\234\213\344\273\273\345\212\241\346\211\247\350\241\214\347\212\266\346\200\201.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/\347\216\260\344\273\243\346\226\271\345\274\217\346\237\245\351\230\205\346\212\245\345\221\212.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/\347\246\273\347\272\277\345\256\211\350\243\205HTMLPublisher\346\217\222\344\273\26601.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/\347\246\273\347\272\277\345\256\211\350\243\205HTMLPublisher\346\217\222\344\273\26602.png"
create mode 100644 "document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/\347\246\273\347\272\277\345\256\211\350\243\205HTMLPublisher\346\217\222\344\273\26603.png"
diff --git "a/document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/FAQ_JENKINS_CONTENT_SECURITY_POLICY01.png" "b/document/Jenkins\345\256\211\350\243\205\351\203\250\347\275\262/\351\262\262\351\271\217DevKitCLI\344\270\216Jenkins\351\233\206\346\210\220\351\203\250\347\275\262\346\214\207\345\257\274\346\211\213\345\206\214.assets/FAQ_JENKINS_CONTENT_SECURITY_POLICY01.png"
new file mode 100644
index 0000000000000000000000000000000000000000..d070b7c2d1688a482cb82be996dd464276fe6f4b
GIT binary patch
literal 93694
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 9G&b>ctd$e9WLT
zkWHTxi`_j}&k~2Em#nv