持续集成流水线中的制品管理(Nexus)

  发布时间:2026-11-12   作者:玩站小弟   我要评论
女老师的x日记。

我们可以在该工作流中通过Maven和CI服务器来构建,存储,管理已编译完成的制品。

Nexus是一个存储库管理器,可存储和检索制品。它使您能够将构建的制品托管在私有且安全的存储库中。默认开发同学在进行开发的时候会使用一些包管理工具,例如:maven、ant、gradle这些都是常见项目编译构建工具 。这些工具可以理解为是一个命令行工具, 本身不会存储任何依赖包,而是通过公网官方的仓库中下载当前项目构建所需要的包。(内网的速度要比公网快,这会直接影响管道的构建速度)

制品上传 NexusUI页面

Nexus的UI中提供制品上传的功能, 导航Upload, 选择要上传的目标仓库。 最后填写仓库中包的坐标和包信息。

使用Maven工具

一般仓库都是需要认证后才能上传的, 所以首先需要在maven的配置文件中(settings.xml)填写仓库的认证信息。

 

     mymaven     admin     admin123    

使用mvn deploy 命令上传发布制品,命令参数与格式:

mvn deploy:deploy-file -DgroupId=xxxxxx pom中的groupId -DartifactId=xxxxxx pom中的artifactId -Dversion=xxxxxx pom中的版本号version -Dpackaging=xxxxxx pom中打包方式 -Dfile=xxxxxx 本地文件 -Durl=xxxxxx 仓库url -DrepositoryId=xxxxxx 对应的是setting.xml(认证) 

如果此时包已经有pom.xml 文件描述, 可以直接通过pom.xml文件进行上传:

mvn deploy:deploy-file  -DgeneratePom=false  -DrepositoryId=mymaven  -Durl=http://192.168.1.200:8081/repos持续itory/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']],   &nbs集成p;                      credentialsId: '1de05a13-197c-4a72-8c6a-cd330fc45559',                          groupId: 'com.jenkins',                          nexusUrl: '192.168.1.200:8081',                          nexusVersion: 'nexus3',                          protocol: 'http',                &n流水bsp;         repository: 'mymavenrepo',                          version: '1.1.2' 

扩展: 如果需要经常上传制品, 我们最后将其封装在一个函数中,便于复用。

//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: '',                        &线中nbsp;             file: file,                                      type: type]],                          credentialsId: '1de05a13-197c-4a72-8c6a-cd330fc45559',                          groupId: groupId,                          nexusUrl: '192.168.1.200:8081',                &nbs的制p;         nexusVersion: 'nexus3',                          protocol: 'http',                          repository: 'mymavenrepo',                          version: version }  使用Nexus API

经过调试,整理如下类型文件上传的接口:

##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=@默认标题_自定义px_2020-10-01-0.png;type=image/png"  -F "raw品管.asset1.filename=默认标题_自定义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?reposit理(ory=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

其实我们可以参考Nexus的UI页面, 使用Jenkins来做一个用于上传制品包的流水线作业:

srcUrl 指的是源码包的源码/包的仓库; branchName 源码包仓库的分支; groupId、artifactid、 version maven类型仓库的坐标; type 包类型;

这个Jenkinsfile包含4个阶段, 分别是下载代码、代码编译、单元测试、上传制品。

@Library("mylib@main") _ import org.devops.*  def checkout = new ChecNekout() 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")                 &nbxusp;   checkout.GetCode("${env.srcUrl}", "${env.branchName}")                 }             }         }          stage("Build"){             steps{                 script{                     println("Build")                     sh "mvn clean package "                 }&nbss)p;            }         }          stage("UnitTest"){             steps{                 script{                     unittest.CodeTest("${env.buildTool}")                 }             }         }          stage("Upload"){             steps{      &nbs持续p;          script{                     NexusUploadByPlugin("${env.artifactId}",                                          'target/demo-0.0.1-SNAPSHOT.jar',                                          "${env.type}",                                      &n集成bsp;   "${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,                &nbs流水p;                     classifier: '',                                      file: file,                                      type: type]],                          credentialsId: '1de05a13-197c-4a72-8c6a-cd330fc45559',                          groupId: grou线中pId,                          nexusUrl: '192.168.1.200:8081',                          nexusVersion: 'nexus3',                          protocol: 'http',                          repository: 'mymavenrepo',                          version: version } 

历史与Nexus相关的主题

 

  • Tag:

相关文章

  • 云计算核心技术Docker教程:Docker使用Fluentd 日志驱动程序

    该fluentd日志记录驱动程序发送容器日志到 Fluentd集电极结构化日志数据。然后,用户可以使用Fluentd的各种输出插件中的任何一个将这些日志写入各个目的地。 除了日志消息本身之外,flue
    2026-11-12
  • 标签: 英伟达 Nemotron3 GR00T AlphaFold GTC2026

    云梦级3月17日云梦级消息,3 月 17 日在美国加州圣何塞举行的 2026 年 GTC 大会上,英伟达推出了 Nemotron 3 系列全理解多模态模型。其中,Nemotron 3 Ultra 依托
    2026-11-12
  • 扎克伯格:AI 数据中心 GPU 紧缺正在缓解,电力将成新瓶颈

    IT之家 5 月 13 日消息,Meta CEO 马克・扎克伯格(Mark Zuckerberg)近日在接受油管 Dwarkesh Patel 频道采访时表示,AI 数据中心的 GPU 紧缺已在缓解过
    2026-11-12
  • Salesforce宣布任命三位新独立董事进入公司董事会

    1月28日消息,据国外媒体报道,当地时间周五,美国云计算公司Salesforce宣布任命三位新的独立董事进入公司董事会,新的任命将于2023年3月1日生效。 这三位新的独立董事分别是Carnival
    2026-11-12
  • 说说 Kubernetes 是怎么实现服务发现的

    我们来说说 Kubernetes 的服务发现。那么首先这个大前提是同主机通信以及跨主机通信都是 ok 的,即同一 Kubernetes 集群中各个 Pod 都是互通的。这点是由更底层的方案实现,包括
    2026-11-12
  • 标签: 软饮

    文:曹双涛 编辑:杨博丞 头图:豆包 2025年,软饮料行业短期遭遇“旺季不旺、经销商库存高企、终端动销放缓”的阶段性挑战。 面对行业短期波动,大量品牌主动求变:或通过价格体系优化缩小渠道价差,修复渠
    2026-11-12

最新评论