目錄
一、實驗
1.GitLabCI上傳Nexus制品
2.優(yōu)化GitLabCI(引用系統(tǒng)變量)
3.添加if條件判斷項目類型
4.優(yōu)化GitLabCI(模板類)
二、問題
1.GitLabCI獲取jar文件失敗
2.?GitLabCI獲取流水線項目命名空間失敗
3.GItLab Package如何實現(xiàn)上傳至本地倉庫
一、實驗
1.GitLabCI上傳Nexus制品
(1)環(huán)境
表1?主機
主機 | 架構(gòu) | 版本 | IP | 備注 |
jenkins | jenkins主節(jié)點? ? ?? |
2.414.2 | 192.168.204.15:8080 | ?gitlab?runner (從節(jié)點) |
gitlab | gitlab 主節(jié)點??????? |
12.10.14 | 192.168.204.8:82 | ??jenkins slave (從節(jié)點) |
sonarqube | 9.6 | 192.168.204.8:9000 | ||
tomcat | nexus | 3.63 | 192.168.204.13:8081 |
(2)進入共享庫
(3)修改流水線,提交到master
include:
- project: 'devops03/devops03-gitlabci-lib'
ref: master
file: "/jobs/CI.yaml"
workflow:
rules:
#新建分支永遠不執(zhí)行
- if: $CI_PIPELINE_SOURCE == "web" #允許手動觸發(fā)
when: always
- if: $CI_COMMIT_BEFORE_SHA == "0000000000000000000000000000000000000000"
when: never
# 其他情況永遠執(zhí)行
- when: always
#取消每個階段自動下載代碼,即全局關(guān)閉作業(yè)代碼下載
variables:
GIT_CHECKOUT: "false"
BUILD_SHELL: "mvn clean package -DskipTests -s settings.xml" ## 構(gòu)建命令
TEST_SHELL: "mvn test -s settings.xml" ## 測試命令
ARTIFACT_PATH: "target/*.jar" ## 制品路徑
TEST_REPORTS: "target/surefire-reports/TEST-*.xml" ## 測試報告
stages:
- build
- test
- sonarscan
- pushartifact
pipelineInit:
extends:
- .pipelineInit
cibuild:
extends:
- .cibuild
citest:
extends:
- .citest
sonarscan:
extends:
- .sonarscan
pushartifact:
tags:
- build
stage: pushartifact
script:
|-
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
(4) maven項目開始運行流水線
(5)運行
(6)成功
(7)查看日志
(8)Nexus查看
2.優(yōu)化GitLabCI(引用系統(tǒng)變量)
(1) 優(yōu)化流水線,提交到master
include:
- project: 'devops03/devops03-gitlabci-lib'
ref: master
file: "/jobs/CI.yaml"
workflow:
rules:
#新建分支永遠不執(zhí)行
- if: $CI_PIPELINE_SOURCE == "web" #允許手動觸發(fā)
when: always
- if: $CI_COMMIT_BEFORE_SHA == "0000000000000000000000000000000000000000"
when: never
# 其他情況永遠執(zhí)行
- when: always
#取消每個階段自動下載代碼,即全局關(guān)閉作業(yè)代碼下載
variables:
GIT_CHECKOUT: "false"
BUILD_SHELL: "mvn clean package -DskipTests -s settings.xml" ## 構(gòu)建命令
TEST_SHELL: "mvn test -s settings.xml" ## 測試命令
ARTIFACT_PATH: "target/*.jar" ## 制品路徑
TEST_REPORTS: "target/surefire-reports/TEST-*.xml" ## 測試報告
stages:
- build
- test
- sonarscan
- pushartifact
pipelineInit:
extends:
- .pipelineInit
cibuild:
extends:
- .cibuild
citest:
extends:
- .citest
sonarscan:
extends:
- .sonarscan
pushartifact:
tags:
- build
stage: pushartifact
script:
|-
pkgName=`ls target/ | grep -e "^maven.*jar$"`
cd target/
mv ${pkgName} ${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.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=/${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: master
file: "/jobs/CI.yaml"
workflow:
rules:
#新建分支永遠不執(zhí)行
- if: $CI_PIPELINE_SOURCE == "web" #允許手動觸發(fā)
when: always
- if: $CI_COMMIT_BEFORE_SHA == "0000000000000000000000000000000000000000"
when: never
# 其他情況永遠執(zhí)行
- when: always
#取消每個階段自動下載代碼,即全局關(guān)閉作業(yè)代碼下載
variables:
GIT_CHECKOUT: "false" ## 全局關(guān)閉作業(yè)代碼下載
PROJECT_TYPE: "java" ## 定義項目類型
BUILD_SHELL: "mvn clean package -DskipTests -s settings.xml" ## 構(gòu)建命令
TEST_SHELL: "mvn test -s settings.xml" ## 測試命令
ARTIFACT_PATH: "target/*.jar" ## 制品路徑
TEST_REPORTS: "target/surefire-reports/TEST-*.xml" ## 測試報告
stages:
- build
- test
- sonarscan
- pushartifact
pipelineInit:
extends:
- .pipelineInit
cibuild:
extends:
- .cibuild
citest:
extends:
- .citest
sonarscan:
extends:
- .sonarscan
pushartifact:
tags:
- build
stage: pushartifact
script:
|-
if [[ ${PROJECT_TYPE} == "java" ]];then
pkgName=`ls target/ | grep -e "^maven.*jar$"`
cd target/
mv ${pkgName} ${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.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=/${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
else
echo "PROJECT_TYPE ERROR [java]"
fi
??(2) maven項目開始運行流水線
(3)運行
(4) 成功
(5)查看日志
(6)Nexus查看
4.優(yōu)化GitLabCI(模板類)
(1)修改流水線與新增模板類,提交到master
CI.yaml文章來源:http://www.zghlxwxcb.cn/news/detail-759709.html
.pipelineInit:
tags:
- build
stage: .pre
variables:
GIT_CHECKOUT: "true"
script:
- ls -l
.cibuild:
tags:
- build
stage: build
script:
- echo "${BUILD_SHELL}"
- ${BUILD_SHELL}
artifacts:
paths:
- ${ARTIFACT_PATH}
.citest:
tags:
- build
stage: test
script:
- echo "${TEST_SHELL}"
- ${TEST_SHELL}
# artifacts:
# reports:
# - junit: ${TEST_REPORTS}
.sonarscan:
tags:
- build
stage: sonarscan
script:
|-
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:
- build
stage: pushartifact
script:
|-
if [[ ${PROJECT_TYPE} == "java" ]];then
pkgName=`ls target/ | grep -e "^maven.*jar$"`
cd target/
mv ${pkgName} ${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.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=/${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
else
echo "PROJECT_TYPE ERROR [java]"
fi
gitlab-ci.yaml
?
include:
- project: 'devops03/devops03-gitlabci-lib'
ref: master
file: "/jobs/CI.yaml"
workflow:
rules:
#新建分支永遠不執(zhí)行
- if: $CI_PIPELINE_SOURCE == "web" #允許手動觸發(fā)
when: always
- if: $CI_COMMIT_BEFORE_SHA == "0000000000000000000000000000000000000000"
when: never
# 其他情況永遠執(zhí)行
- when: always
#取消每個階段自動下載代碼,即全局關(guān)閉作業(yè)代碼下載
variables:
GIT_CHECKOUT: "false" ## 全局關(guān)閉作業(yè)代碼下載
PROJECT_TYPE: "java" ## 定義項目類型
BUILD_SHELL: "mvn clean package -DskipTests -s settings.xml" ## 構(gòu)建命令
TEST_SHELL: "mvn test -s settings.xml" ## 測試命令
ARTIFACT_PATH: "target/*.jar" ## 制品路徑
TEST_REPORTS: "target/surefire-reports/TEST-*.xml" ## 測試報告
stages:
- build
- test
- sonarscan
- pushartifact
pipelineInit:
extends:
- .pipelineInit
cibuild:
extends:
- .cibuild
citest:
extends:
- .citest
sonarscan:
extends:
- .sonarscan
pushartifact:
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如何實現(xiàn)上傳至本地倉庫
(1)版本
GItLab Package 需要GitLab 13.5及以上版本實現(xiàn)
(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:
- build
stage: pushartifact
script:
|-
if [[ ${PROJECT_TYPE} == "java" ]];then
newPkgName=${CI_PROJECT_NAME}-${CI_COMMIT_SHA}.jar
pkgName=`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"
else
echo "PROJECT_TYPE ERROR [java]"
fi
gitlab-ci.yaml文章來源地址http://www.zghlxwxcb.cn/news/detail-759709.html
pushartifact:
extends:
- .pushartforgitlab
到了這里,關(guān)于持續(xù)集成交付CICD:GitLabCI上傳Nexus制品的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!