新聞中心
持續(xù)集成流水線中的制品管理(Nexus)
作者:Lizeyang 2021-10-12 08:47:01
云計(jì)算 Nexus是一個(gè)存儲(chǔ)庫(kù)管理器,可存儲(chǔ)和檢索制品。它使您能夠?qū)?gòu)建的制品托管在私有且安全的存儲(chǔ)庫(kù)中。默認(rèn)開發(fā)同學(xué)在進(jìn)行開發(fā)的時(shí)候會(huì)使用一些包管理工具,例如:maven、ant、gradle這些都是常見項(xiàng)目編譯構(gòu)建工具 。

在善右等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),網(wǎng)絡(luò)營(yíng)銷推廣,外貿(mào)營(yíng)銷網(wǎng)站建設(shè),善右網(wǎng)站建設(shè)費(fèi)用合理。
我們可以在該工作流中通過Maven和CI服務(wù)器來(lái)構(gòu)建,存儲(chǔ),管理已編譯完成的制品。
Nexus是一個(gè)存儲(chǔ)庫(kù)管理器,可存儲(chǔ)和檢索制品。它使您能夠?qū)?gòu)建的制品托管在私有且安全的存儲(chǔ)庫(kù)中。默認(rèn)開發(fā)同學(xué)在進(jìn)行開發(fā)的時(shí)候會(huì)使用一些包管理工具,例如:maven、ant、gradle這些都是常見項(xiàng)目編譯構(gòu)建工具 。這些工具可以理解為是一個(gè)命令行工具, 本身不會(huì)存儲(chǔ)任何依賴包,而是通過公網(wǎng)官方的倉(cāng)庫(kù)中下載當(dāng)前項(xiàng)目構(gòu)建所需要的包。(內(nèi)網(wǎng)的速度要比公網(wǎng)快,這會(huì)直接影響管道的構(gòu)建速度)
制品上傳
NexusUI頁(yè)面
Nexus的UI中提供制品上傳的功能, 導(dǎo)航Upload, 選擇要上傳的目標(biāo)倉(cāng)庫(kù)。 最后填寫倉(cāng)庫(kù)中包的坐標(biāo)和包信息。
使用Maven工具
一般倉(cāng)庫(kù)都是需要認(rèn)證后才能上傳的, 所以首先需要在maven的配置文件中(settings.xml)填寫倉(cāng)庫(kù)的認(rèn)證信息。
mymaven admin admin123
使用mvn deploy 命令上傳發(fā)布制品,命令參數(shù)與格式:
- mvn deploy:deploy-file
- -DgroupId=xxxxxx pom中的groupId
- -DartifactId=xxxxxx pom中的artifactId
- -Dversion=xxxxxx pom中的版本號(hào)version
- -Dpackaging=xxxxxx pom中打包方式
- -Dfile=xxxxxx 本地文件
- -Durl=xxxxxx 倉(cāng)庫(kù)url
- -DrepositoryId=xxxxxx 對(duì)應(yīng)的是setting.xml(認(rèn)證)
如果此時(shí)包已經(jīng)有pom.xml 文件描述, 可以直接通過pom.xml文件進(jìn)行上傳:
- mvn deploy:deploy-file \
- -DgeneratePom=false \
- -DrepositoryId=mymaven \
- -Durl=http://192.168.1.200:8081/repository/mymavenrepo \
- -DpomFile=pom.xml \
- -Dfile=target/demo-0.0.1-SNAPSHOT.jar
使用Jenkins插件
安裝Nexus Artifact Uploader插件、使用片段生成器生成DSL。
- nexusArtifactUploader artifacts: [[artifactId: 'DevOpstest',
- classifier: '',
- file: 'target/demo-0.0.1-SNAPSHOT.jar',
- type: 'jar']],
- credentialsId: '1de05a13-197c-4a72-8c6a-cd330fc45559',
- groupId: 'com.jenkins',
- nexusUrl: '192.168.1.200:8081',
- nexusVersion: 'nexus3',
- protocol: 'http',
- repository: 'mymavenrepo',
- version: '1.1.2'
擴(kuò)展: 如果需要經(jīng)常上傳制品, 我們最后將其封裝在一個(gè)函數(shù)中,便于復(fù)用。
- //NexusUploadByPlugin('devops-test', 'target/demo-0.0.1-SNAPSHOT.jar', 'jar', 'com.jenkins','1.1.2')
- def NexusUploadByPlugin(artifactId, file, type, groupId,version){
- nexusArtifactUploader artifacts: [[artifactId: artifactId,
- classifier: '',
- file: file,
- type: type]],
- credentialsId: '1de05a13-197c-4a72-8c6a-cd330fc45559',
- groupId: groupId,
- nexusUrl: '192.168.1.200:8081',
- nexusVersion: 'nexus3',
- protocol: 'http',
- repository: 'mymavenrepo',
- version: version
- }
使用Nexus API
經(jīng)過調(diào)試,整理如下類型文件上傳的接口:
- ##PNG
- curl -X POST "http://192.168.1.200:8081/service/rest/v1/components?repository=myrepo" \
- -H "accept: application/json" \
- -H "Content-Type: multipart/form-data" \
- -F "raw.directory=/tmp" \
- -F "raw.asset1=@默認(rèn)標(biāo)題_自定義px_2020-10-01-0.png;type=image/png" \
- -F "raw.asset1.filename=默認(rèn)標(biāo)題_自定義px_2020-10-01-0.png"
- ## tar.gz & ZIP
- curl -X POST "http://192.168.1.200:8081/service/rest/v1/components?repository=myrepo" \
- -H "accept: application/json" \
- -H "Content-Type: multipart/form-data" \
- -F "raw.directory=/tmp" \
- -F "[email protected];type=application/x-gzip" \
- -F "raw.asset1.filename=aaa.tar.gz"
- curl -X POST "http://192.168.1.200:8081/service/rest/v1/components?repository=myrepo" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "raw.directory=/tmp" -F "raw.asset1=@waypoint_0.1.5_linux_amd64.zip;type=application/x-gzip" -F "raw.asset1.filename=waypoint_0.1.5_linux_amd64.zip"
- ## Jar file
- curl -X POST "http://192.168.1.200:8081/service/rest/v1/components?repository=myrepo" \
- -H "accept: application/json" \
- -H "Content-Type: multipart/form-data" \
- -F "raw.directory=/tmp" \
- -F "[email protected];type=application/java-archive" \
- -F "raw.asset1.filename=aopalliance-1.0.jar"
下載制品
cURL
- curl -u admin:admin123 http://192.168.1.200:8081/repository/anyops/com/anyops/a
- nyops-devops-service/1.1.1/anyops-devops-service-1.1.1.jar -o anyops-devops-service-1.1.1.jar
Wget
- wget --http-user=admin --http-passwd=admin123 http://192.168.1.200:8081/repos
- itory/anyops/com/anyops/anyops-devops-service/1.1.1/anyops-devops-service-1.1.1.jar
案例: 配置制品上傳Pipeline
其實(shí)我們可以參考Nexus的UI頁(yè)面, 使用Jenkins來(lái)做一個(gè)用于上傳制品包的流水線作業(yè):
- srcUrl 指的是源碼包的源碼/包的倉(cāng)庫(kù);
- branchName 源碼包倉(cāng)庫(kù)的分支;
- groupId、artifactid、 version maven類型倉(cāng)庫(kù)的坐標(biāo);
- type 包類型;
這個(gè)Jenkinsfile包含4個(gè)階段, 分別是下載代碼、代碼編譯、單元測(cè)試、上傳制品。
- @Library("mylib@main") _
- import org.devops.*
- def checkout = new Checkout()
- def build = new Build()
- def unittest = new UnitTest()
- def sonar = new Sonar()
- pipeline {
- agent { label "build" }
- options {
- skipDefaultCheckout true
- }
- stages{
- stage("Checkout"){
- steps{
- script {
- println("GetCode")
- checkout.GetCode("${env.srcUrl}", "${env.branchName}")
- }
- }
- }
- stage("Build"){
- steps{
- script{
- println("Build")
- sh "mvn clean package "
- }
- }
- }
- stage("UnitTest"){
- steps{
- script{
- unittest.CodeTest("${env.buildTool}")
- }
- }
- }
- stage("Upload"){
- steps{
- script{
- NexusUploadByPlugin("${env.artifactId}",
- 'target/demo-0.0.1-SNAPSHOT.jar',
- "${env.type}",
- "${env.groupId}",
- "${env.version}")
- }
- }
- }
- }
- }
- //NexusUploadByPlugin('devops-test', 'target/demo-0.0.1-SNAPSHOT.jar', 'jar', 'com.jenkins','1.1.2')
- def NexusUploadByPlugin(artifactId, file, type, groupId,version){
- nexusArtifactUploader artifacts: [[artifactId: artifactId,
- classifier: '',
- file: file,
- type: type]],
- credentialsId: '1de05a13-197c-4a72-8c6a-cd330fc45559',
- groupId: groupId,
- nexusUrl: '192.168.1.200:8081',
- nexusVersion: 'nexus3',
- protocol: 'http',
- repository: 'mymavenrepo',
- version: version
- }
歷史與Nexus相關(guān)的主題
本文轉(zhuǎn)載自微信公眾號(hào)「DevOps云學(xué)堂」
分享標(biāo)題:持續(xù)集成流水線中的制品管理(Nexus)
標(biāo)題來(lái)源:http://fisionsoft.com.cn/article/djecogh.html


咨詢
建站咨詢
