持續集成交付CICD:GitLabCI上傳Nexus制品

目錄

一、實驗

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215049.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215049.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215049.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

.NET 8 編寫 LiteDB vs SQLite 數據庫 CRUD 接口性能測試(準備篇)

WebAppDbTest 項目準備 項目準備1、.net cli 創建項目2、nuget 包引用和項目結構2.1、項目添加相關 nuget 包2.2、WebAppDbTest 項目結構 3、項目代碼說明3.1、CSharp/C# 類文件說明3.2、json 配置文件說明 4、項目運行預覽 數據庫 .db 文件準備1、創建 SQLite 數據庫1.1、在 W…

c#讀取CSV文件跟Excel導入成DataTble

1.讀取CSV文件 /// <summary>/// 讀取CSV文件/// </summary>/// <param name"fileName">文件路徑</param>public static DataTable ReadCSV(string fileName){DataTable dt new DataTable();FileStream fs new FileStream(fileName, FileM…

Python---綜合案例

一、系統需求分析 1、需求分析 使用面向對象編程思想完成學員管理系統的開發&#xff0c;具體如下&#xff1a; ① 系統要求&#xff1a;學員數據存儲在文件中 ② 系統功能&#xff1a;添加學員、刪除學員、修改學員信息、查詢學員信息、顯示所有學員信息、保存學員信息及退…

56.windows docker 安裝ES、Go操作ES

文章目錄 一、環境準備1、 docker安裝ES2、啟動容器3、圖像化客戶端工具ElasticSearch-Head 二、Go ES連接與認證1、 連接ES2、配置ES認證 三、索引的增刪改查四、文檔的增刪改創建單個文檔根據文檔id刪除文檔批量刪除文檔批量創建文檔 五、文檔查詢列表查詢精確匹配模糊匹配嵌…

ubuntu18.04配置cuda+cudnn+tensorrt+anconda+pytorch-gpu+pycharm

一、顯卡驅動安裝 執行nvidia-smi查看安裝情況 二、cuda安裝 cuda官網下載cuda_11.6.2_510.47.03_linux.run&#xff0c;安裝執行 sudo sh cuda_11.6.2_510.47.03_linux.run提升安裝項&#xff0c;驅動不用安裝&#xff0c;即第一項&#xff08;Driver&#xff09;&#xff…

如何使用Java在Excel中添加動態數組公式?

本文由葡萄城技術團隊發布。轉載請注明出處&#xff1a;葡萄城官網&#xff0c;葡萄城為開發者提供專業的開發工具、解決方案和服務&#xff0c;賦能開發者。 前言 動態數組公式是 Excel 引入的一項重要功能&#xff0c;它將 Excel 分為兩種風格&#xff1a;Excel 365 和傳統 …

虹科技術 | IO-Link Wireless如何賦能工廠車間邁向無線自動化?

大規模定制、卓越運營和商業智能正在從根本上改變制造業&#xff0c;為了在競爭中立于不敗之地&#xff0c;制造商需要更加靈活、通用、可擴展和具有成本效益的機器和生產線。隨著制造商向工業 4.0 邁進&#xff0c;更好的適應性、更高的吞吐量和更短的停機時間是他們的共同要求…

打包CSS

接上一個打包HTML繼續進行CSS的打包 1.在之前的文件夾里的src文件夾創建一個css文件 2.在瀏覽器打開webpack——>中文文檔——>指南——>管理資源——>加載CSS 3.復制第一句代碼到終端 4.復制下圖代碼到webpack.config.js腳本的plugins&#xff1a;[.....]內容下…

【docker】Hello World

搜索hello-world鏡像 docker search hello-world拉去鏡像 docker pull hello-world查看本地鏡像 docker images 運行鏡像 docker run hello-world查看所有的容器 docker ps -a查詢start狀態容器 docker ps 輸出介紹 CONTAINER ID: 容器 ID。IMAGE: 使用的鏡像。COMMAN…

面試經典150題(14)

leetcode 150道題 計劃花兩個月時候刷完&#xff0c;今天&#xff08;第五天&#xff09;完成了1道(14)150&#xff1a; 14. &#xff08;134. 加油站&#xff09;題目描述&#xff1a; 在一條環路上有 n 個加油站&#xff0c;其中第 i 個加油站有汽油 gas[i] 升。 你有一輛油…

<JavaEE> 鎖進階 -- synchronized 的鎖優化

目錄 一、如何形容 synchronized 鎖 二、鎖升級 2.1 偏向鎖 2.2 輕量級鎖 2.3 重量級鎖 三、鎖消除 四、鎖粗化 一、如何形容 synchronized 鎖 synchronized 鎖是一個內部優化非常好的鎖&#xff0c;大部分情況下這個鎖都是適用的。在初始階段 synchronized 是一個樂觀…

分布式搜索引擎02

分布式搜索引擎02 在昨天的學習中&#xff0c;我們已經導入了大量數據到elasticsearch中&#xff0c;實現了elasticsearch的數據存儲功能。但elasticsearch最擅長的還是搜索和數據分析。 所以今天&#xff0c;我們研究下elasticsearch的數據搜索功能。我們會分別使用DSL和Res…

react面試總結2

redux中sages和thunk中間件的區別&#xff0c;優缺點 Redux 中的 redux-saga 和 redux-thunk 都是中間件&#xff0c;用于處理異步操作&#xff0c;但它們有一些區別。 Redux Thunk&#xff1a; 簡單易用&#xff1a;redux-thunk 是比較簡單直觀的中間件&#xff0c;它允許 …

手撕分布式緩存---HTTP Server搭建

經過了前兩個章節的學習&#xff0c;分布式緩存的存儲與新增我們已經實現了&#xff0c;并且對其做了高可用處理。本章節我們剝離和緩存強相關的邏輯&#xff0c;開始搭建一個HTTP服務器&#xff0c;畢竟緩存數據庫搭建完之后別人沒法訪問也是沒有用處的。這一章節我們重點學習…

ElasticSearch應用場景以及技術選型[ES系列] - 第496篇

歷史文章&#xff08;文章累計490&#xff09; 《國內最全的Spring Boot系列之一》 《國內最全的Spring Boot系列之二》 《國內最全的Spring Boot系列之三》 《國內最全的Spring Boot系列之四》 《國內最全的Spring Boot系列之五》 《國內最全的Spring Boot系列之六》 M…

PDF控件Spire.PDF for .NET【轉換】演示:將 PDF 轉換為 Excel

PDF是一種通用的文件格式&#xff0c;但它很難編輯。如果您想修改和計算PDF數據&#xff0c;將PDF轉換為Excel將是一個理想的解決方案。在本文中&#xff0c;您將了解如何使用Spire.PDF for .NET在 C# 和 VB.NET 中將 PDF 轉換為 Excel。 Spire.Doc 是一款專門對 Word 文檔進行…

【華為數據之道學習筆記】3-10元數據管理架構及策略

元數據管理架構包括產生元數據、采集元數據、注冊元數據和運 維元數據。 產生元數據&#xff1a; 制定元數據管理相關流程與規范的落地方案&#xff0c;在IT產品開發過程中實現業務元數據與技術元數據的連接。 采集元數據&#xff1a; 通過統一的元模型從各類IT系統中自動采集元…

多線程(初階九:線程池)

目錄 一、線程池的由來 二、線程池的簡單介紹 1、ThreadPoolExecutor類 &#xff08;1&#xff09;核心線程數和最大線程數&#xff1a; &#xff08;2&#xff09;保持存活時間和存活時間的單位 &#xff08;3&#xff09;放任務的隊列 &#xff08;4&#xff09;線程工…

Axure的安裝以及簡單使用

目錄 Axure簡介 是什么 有什么用 Axure的優缺點 優點&#xff1a; 缺點&#xff1a; 安裝 漢化 Axure的使用 工具欄 頁面 ?編輯 添加子頁面 ?編輯 Axure簡介 是什么 Axure是一款著名的原型設計工具。它允許用戶創建交互式線框圖、流程圖、原型和其他設計文檔&…

「Verilog學習筆記」脈沖同步電路

專欄前言 本專欄的內容主要是記錄本人學習Verilog過程中的一些知識點&#xff0c;刷題網站用的是牛客網 timescale 1ns/1nsmodule pulse_detect(input clk_fast , input clk_slow , input rst_n ,input data_in ,output dataout );reg data_level, dat…