目錄
一、實驗
1.GitLabCI上傳Nexus制品
2.優化GitLabCI(引用系統變量)
3.添加if條件判斷項目類型
4.優化GitLabCI(模板類)
二、問題
1.GitLabCI獲取jar文件失敗
2.?GitLabCI獲取流水線項目命名空間失敗
3.GItLab Package如何實現上傳至本地倉庫
一、實驗
1.GitLabCI上傳Nexus制品
(1)進入共享庫
(2)修改流水線,提交到master
include:- project: 'devops03/devops03-gitlabci-lib'ref: masterfile: "/jobs/CI.yaml"workflow:rules:#新建分支永遠不執行- if: $CI_PIPELINE_SOURCE == "web" #允許手動觸發when: always- if: $CI_COMMIT_BEFORE_SHA == "0000000000000000000000000000000000000000"when: never# 其他情況永遠執行- when: always#取消每個階段自動下載代碼,即全局關閉作業代碼下載
variables:GIT_CHECKOUT: "false"BUILD_SHELL: "mvn clean package -DskipTests -s settings.xml" ## 構建命令TEST_SHELL: "mvn test -s settings.xml" ## 測試命令ARTIFACT_PATH: "target/*.jar" ## 制品lujingTEST_REPORTS: "target/surefire-reports/TEST-*.xml" ## 測試報告stages:- build- test- sonarscan- pushartifactpipelineInit:extends: - .pipelineInitcibuild:extends:- .cibuildcitest:extends:- .citestsonarscan:extends:- .sonarscanpushartifact:tags:- buildstage: pushartifactscript:|-pkgName=`ls target/ | grep -e "^maven.*jar$"`curl -X POST "http://192.168.204.13:8081/service/rest/v1/components?repository=mylocalrepo" \-H "accept: application/json" \-H "Content-Type: multipart/form-data" \-F "raw.directory=/tmp" \-F "raw.asset1=@target/${pkgName};type=application/java-archive" \-F "raw.asset1.filename=${pkgName}" -u admin:Admin123
(2) maven項目開始運行流水線
(3)運行
(4)成功
(5)查看日志
(6)Nexus查看
2.優化GitLabCI(引用系統變量)
(1) 優化流水線,提交到master
include:- project: 'devops03/devops03-gitlabci-lib'ref: masterfile: "/jobs/CI.yaml"workflow:rules:#新建分支永遠不執行- if: $CI_PIPELINE_SOURCE == "web" #允許手動觸發when: always- if: $CI_COMMIT_BEFORE_SHA == "0000000000000000000000000000000000000000"when: never# 其他情況永遠執行- when: always#取消每個階段自動下載代碼,即全局關閉作業代碼下載
variables:GIT_CHECKOUT: "false"BUILD_SHELL: "mvn clean package -DskipTests -s settings.xml" ## 構建命令TEST_SHELL: "mvn test -s settings.xml" ## 測試命令ARTIFACT_PATH: "target/*.jar" ## 制品lujingTEST_REPORTS: "target/surefire-reports/TEST-*.xml" ## 測試報告stages:- build- test- sonarscan- pushartifactpipelineInit:extends: - .pipelineInitcibuild:extends:- .cibuildcitest:extends:- .citestsonarscan:extends:- .sonarscanpushartifact:tags:- buildstage: pushartifactscript:|-pkgName=`ls target/ | grep -e "^maven.*jar$"`cd target/mv ${pkgName} ${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jarcurl -X POST "http://192.168.204.13:8081/service/rest/v1/components?repository=mylocalrepo" \-H "accept: application/json" \-H "Content-Type: multipart/form-data" \-F "raw.directory=/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_COMMIT_SHA}/" \-F "raw.asset1=@${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar;type=application/java-archive" \-F "raw.asset1.filename=${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar" -u admin:Admin123
?(2) maven項目開始運行流水線
(3)運行
(4) 成功
(5)查看日志
(6)Nexus查看
3.添加if條件判斷項目類型
(1)修改流水線,提交到master
include:- project: 'devops03/devops03-gitlabci-lib'ref: masterfile: "/jobs/CI.yaml"workflow:rules:#新建分支永遠不執行- if: $CI_PIPELINE_SOURCE == "web" #允許手動觸發when: always- if: $CI_COMMIT_BEFORE_SHA == "0000000000000000000000000000000000000000"when: never# 其他情況永遠執行- when: always#取消每個階段自動下載代碼,即全局關閉作業代碼下載
variables:GIT_CHECKOUT: "false" ## 全局關閉作業代碼下載PROJECT_TYPE: "java" ## 定義項目類型BUILD_SHELL: "mvn clean package -DskipTests -s settings.xml" ## 構建命令TEST_SHELL: "mvn test -s settings.xml" ## 測試命令ARTIFACT_PATH: "target/*.jar" ## 制品lujingTEST_REPORTS: "target/surefire-reports/TEST-*.xml" ## 測試報告stages:- build- test- sonarscan- pushartifactpipelineInit:extends: - .pipelineInitcibuild:extends:- .cibuildcitest:extends:- .citestsonarscan:extends:- .sonarscanpushartifact:tags:- buildstage: pushartifactscript:|-if [[ ${PROJECT_TYPE} == "java" ]];thenpkgName=`ls target/ | grep -e "^maven.*jar$"`cd target/mv ${pkgName} ${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jarcurl -X POST "http://192.168.204.13:8081/service/rest/v1/components?repository=mylocalrepo" \-H "accept: application/json" \-H "Content-Type: multipart/form-data" \-F "raw.directory=/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_COMMIT_SHA}/" \-F "raw.asset1=@${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar;type=application/java-archive" \-F "raw.asset1.filename=${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar" -u admin:Admin123elseecho "PROJECT_TYPE ERROR [java]"fi
??(2) maven項目開始運行流水線
(3)運行
(4) 成功
(5)查看日志
(6)Nexus查看
4.優化GitLabCI(模板類)
(1)修改流水線與新增模板類,提交到master
CI.yaml
.pipelineInit:tags:- buildstage: .prevariables:GIT_CHECKOUT: "true"script:- ls -l.cibuild:tags:- buildstage: buildscript:- echo "${BUILD_SHELL}"- ${BUILD_SHELL}artifacts:paths:- ${ARTIFACT_PATH}.citest:tags:- buildstage: testscript:- echo "${TEST_SHELL}"- ${TEST_SHELL}# artifacts:# reports:# - junit: ${TEST_REPORTS}.sonarscan:tags: - buildstage: sonarscanscript: |-sonar-scanner -Dsonar.host.url=http://192.168.204.8:9000 \-Dsonar.projectKey=${CI_PROJECT_NAME}\-Dsonar.projectName=${CI_PROJECT_NAME} \-Dsonar.projectVersion=${CI_COMMIT_SHA} \-Dsonar.login=${SONAR_AUTH_TOKEN} \-Dsonar.ws.timeout=30 \-Dsonar.projectDescription=${CI_PROJECT_TITLE} \-Dsonar.links.homepage=${CI_PROJECT_URL} \-Dsonar.links.ci=${CI_PIPELINE_URL} \-Dsonar.sources=src \-Dsonar.sourceEncoding=UTF-8 \-Dsonar.java.binaries=target/classes \-Dsonar.java.test.binaries=target/test-classes \-Dsonar.java.surefire.report=target/surefire-reports \-Dsonar.core.codeCoveragePlugin=jacoco \-Dsonar.jacoco.reportPaths=target/jacoco.exec.pushartifact:tags:- buildstage: pushartifactscript:|-if [[ ${PROJECT_TYPE} == "java" ]];thenpkgName=`ls target/ | grep -e "^maven.*jar$"`cd target/mv ${pkgName} ${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jarcurl -X POST "http://192.168.204.13:8081/service/rest/v1/components?repository=mylocalrepo" \-H "accept: application/json" \-H "Content-Type: multipart/form-data" \-F "raw.directory=/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_COMMIT_SHA}/" \-F "raw.asset1=@${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar;type=application/java-archive" \-F "raw.asset1.filename=${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar" -u admin:Admin123elseecho "PROJECT_TYPE ERROR [java]"fi
gitlab-ci.yaml
?
include:- project: 'devops03/devops03-gitlabci-lib'ref: masterfile: "/jobs/CI.yaml"workflow:rules:#新建分支永遠不執行- if: $CI_PIPELINE_SOURCE == "web" #允許手動觸發when: always- if: $CI_COMMIT_BEFORE_SHA == "0000000000000000000000000000000000000000"when: never# 其他情況永遠執行- when: always#取消每個階段自動下載代碼,即全局關閉作業代碼下載
variables:GIT_CHECKOUT: "false" ## 全局關閉作業代碼下載PROJECT_TYPE: "java" ## 定義項目類型BUILD_SHELL: "mvn clean package -DskipTests -s settings.xml" ## 構建命令TEST_SHELL: "mvn test -s settings.xml" ## 測試命令ARTIFACT_PATH: "target/*.jar" ## 制品lujingTEST_REPORTS: "target/surefire-reports/TEST-*.xml" ## 測試報告stages:- build- test- sonarscan- pushartifactpipelineInit:extends: - .pipelineInitcibuild:extends:- .cibuildcitest:extends:- .citestsonarscan:extends:- .sonarscanpushartifact:extends:- .pushartifact?
??(2) maven項目開始運行流水線
(3)運行
(4) 成功
(5)查看日志
(6)Nexus查看
二、問題
1.GitLabCI獲取jar文件失敗
(1)報錯
(2)原因分析
正則表達式輸入有誤
(3)解決方法
修改正則表達式。
修改前:
pkgName=`ls target/ | grep -e "jar$"`
修改后:
pkgName=`ls target/ | grep -e "^maven.*jar$"`
成功:
2.?GitLabCI獲取流水線項目命名空間失敗
(1)報錯
(2)原因分析
變量錯誤
(3)解決方法
修改引用流水線變量。
修改前:
-F "raw.directory=/${CI_PROJECT_ROOT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_COMMIT_SHA}/" \
修改后:
-F "raw.directory=/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_COMMIT_SHA}/" \
成功:
3.GItLab Package如何實現上傳至本地倉庫
(1)版本
GItLab Package 需要GitLab 13.5及以上版本實現
(2)curl命令上傳到GItLab Package
curl --header "PRIVATE-TOKEN: 4b54764fd071175387e94385a0d6c5" \--upload-file sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar \"http://192.168.204.8/api/v4/projects/14/packages/generic/devops03-maven5-service/0.0.1/sonar-gitlab-plugin-4.1.0-SNAPSHOT.jar?status=default"
(3)流水線上傳到GItLab Package
CI.yaml
.pushartforgitlab:tags:- buildstage: pushartifact script:|- if [[ ${PROJECT_TYPE} == "java" ]];thennewPkgName=${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jarpkgName=`ls target/ | grep -e "jar$"`cd target/mv ${pkgName} ${newPkgName}curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" \--upload-file ${newPkgName} \"http://192.168.204.8/api/v4/projects/${CI_PROJECT_ID}/packages/generic/${CI_PROJECT_NAME}/${CI_COMMIT_SHA}/${newPkgName}?status=default"elseecho "PROJECT_TYPE ERROR [java]"fi
gitlab-ci.yaml
pushartifact:extends:- .pushartforgitlab