目录
一、前言
Nexus是一个强大的仓库管理器,极大地简化了内部仓库的维护和外部仓库的访问。 支持搭建私服,通常被作为docker、npm、yum、go、apt等的私有仓库。 其优点为:加速构建、提高稳定性、使用文件系统和Lucene来组织数据(不需额外搭建数据库)。 本文将从前端和后端的角度,分别介绍发包的方式。
二、后端Maven项目
本章节首先介绍了maven项目发包之前,需要做的一些nexus账户和源的配置。然后,介绍本地开发的maven项目,需要用到的发包命令。接着,又介绍了针对本地的jar包,网上第三方不维护和的jar包,发包到nexus的方式。
2.1 配置setting.xml
本人所负责到的后端项目,均是maven项目,maven项目在发包之前,都需要在setting.xml文件中对目标nexus进行配置,以下是我使用的配置,可进行参考:
<servers>
<!-- 发包使用到的nexus账户,务必确保该账户有以下mirror中url的权限 -->
<server>
<id>maven-public</id>
<username>admin</username>
<password>Admin123</password>
</server>
<servers>
<mirrors>
<!-- nexus 发包目标位置 -->
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<name>RDXA Repository</name>
<url>http://192.168.70.20:8081/repository/maven-public/</url>
</mirror>
<mirrors>
图 使用maven发包前针对nexus的配置参考
2.2 针对存在源码的maven项目
主要使用场景有3种,第一种,有的包年代久远,官网、Maven中央仓库或者镜像库,早已经不更新该依赖包了,但是能从github或者码云上找到开放出的源码。第二种,我们在使用第三方开源库的过程中,发现了已知的bug。第三种,本地开发的maven项目。例如:公司内部的公共库。
特别是前2种情况,通常我们可以把该开源项目的源码下载到本地,进行编译或者bug修复,并发布到私服上,就能供各产品线开发人员,或者项目CI/CD使用。
mvn clean deploy
-Dpmd.skip=true
-Dcheckstyle.skip=true
图 针对本地开发的maven项目发包命令
2.3 针对特定jar包
主要介绍针对jar包的发包方式。首先,比如古老项目中,有用到的网上第三方库,该第三方库早已不再维护,但是能找到该项目jar包的备份。然后,可以是被中央仓库或者镜像仓库永久下架的,但是能找到该项目jar包的备份。以下,以taobao-sdk-java-auto为例。
mvn deploy:deploy-file
-DgroupId=com.dingtalk.api
-DartifactId=top-api-sdk
-Dversion=2.0.0-RELEASE
-Dpackaging=jar
-Dfile="D:\jar\taobao-sdk-java-auto_1479188381469-20210630.jar"
-DgeneratePom=true
-DrepositoryId=maven
-Durl=http://192.168.70.29:8081/repository/maven-public/
-DrepositoryId=maven-public
图 针对jar包发包命令
三、前端Npm项目
本章节主要介绍npm项目发包实践。主要使用场景与章节2.2中类似,此处将不再赘述。
以下脚本或者命令,只适用于本人使用到的npm发包场景。
首先,拉公共库代码。然后,升级版本号。按照项目迭代规约,公共库版本号需要升级。其次,更改npm源为公共源npm-group,确保装包可用。接下来,执行install和build命令进行装包和打包,生成发布所需文件。进一步,模拟nexus登陆,该用户需拥有nexus上发布空间的publish权限。最后,更改发布源,执行publish命令进行版本发布。
针对以上业务需求,本人使用到的发包脚本如下:
#!/bin/sh
jenkins_job_name=$2
npm_package_name=$3
#1.退出登陆,确保登陆用户为认证用户
rm -rf ./.npmrc
npm logout
npm -v
npm config get registry
rm -rf package-lock.json
rm -rf yarn.lock
#2.更改版本号
ansible-playbook -e "host_name=$1 project_name=$2 package_version=$4" /home/jenkins/ci/$1/are-publish-npm.yml
#3.装包
rm -rf ./.npmrc
npm config set registry http://192.168.25.57:8081/repository/npm-group/
(yarn install) && ( echo 🚨install success )
#4.模拟登陆,查看登陆信息
echo "email=admin-fs@example.org" > ./.npmrc
echo "always-auth=true" >> ./.npmrc
echo "_auth=YWRtaW4tZnM6YWRtaW4tZnM=" >> ./.npmrc
npm whoami
#5.设置发布源,进行发布
npm config set registry http://192.168.25.57:8081/repository/npm-product-FusionSite/
npm config get registry
( npm run build:umd ) && ( echo 🚨$npm_package_name-npm-build success ) && ( npm publish ) || ( echo 🚨$npm_package_name"Error: $_" > ./suppinter_publish.log )
echo 🚨$npm_package_name publish success
#6.还原发布镜像源
npm config set registry http://192.168.25.57:8081/repository/npm-group/
图 针对npm项目发包命令
四、总结
技术栈层出不穷,更新迭代飞快,产生了众多派系,例如maven和npm等等派系。其相同派系的项目,编译,测试和发布过程类似,均可以参考本文所使用到的发包命令,并配合jenkins灵活使用,来进一步健全devops体系。
最后,希望本文能启发到你,也欢迎有其它使用场景的朋友来和我交流,共同进步是我们共同的目标。