一、总体流程
开发人员通过SVN或者Git提交代码至代码仓库,每个发布的版本都会进行更新package.json信息。然后通过npm publish命
二、配置项目
在项目的源码文件中编辑package.json文件,写入发布的版本名称(name),版本号等信息
1、Nexus创建仓库
2、Nexus添加Realms

- 注:如果不添加会导致上传制品时401无权限问题
3、登入Nexus私服
在Jenkins的服务器上登入到刚才创建的NPM私服,登入成功会在当前执行npm命令的用户家目录下生成一个.npmrc文件,里面会存储私服的地址和私服的登入账号密码
[deploy@jenkins-slave1 ~]$ npm login --registry=http://nexus_ip:prot/repository/npm-repository/
Username: admin #用户
Password: #密码
Email: (this IS public) dqzboy@qq.com #邮箱
Logged in as admin on http://nexus_ip:prot/repository/npm-repository/ .
- 备注:多个Repository仓库的地址都可以写入到.npmrc文件中进行存储
三、结合Jenkins
1、配置凭据
- 配置连接到
文章来源(Source):浅时光博客 Nexus平台账号密码
2、编辑脚本
2.1:Pipeline脚本
pipeline {
agent {
node { label 'Slave1'} #选择jenkins节点
}
environment {
dev_serverIP = "192.168.66.80" #开发环境节点ip
test_serverIP = "192.168.66.81" #测试环境节点ip
CODE_DIR = "/data/web_client " #代码存储目录(各节点存储路径统一)
server_user = "appadmin" #ssh登入用户(前提是已经实现免密)
DEPLOY = "$DEPLOY" #Job前端指定的部署环境传给DEPLOY变量
}
stages {
stage('Checkout') {
//只在开发环境进行代码检出
when {
environment name: 'DEPLOY',value: 'dev'
}
steps {
//job中调用REVISION实现在web界面选择不同分支进行构建
checkout([$class: 'GitSCM', branches: [[name: '${REVISION}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'bc392f71-0bd0-4011-aedc-a5345f8f6b2e', url: '项目gitlab存储路径']]])
}
}
stage('代码构建') {
//只有开发环境进行代码构建,其他环境直接下载成品即可
when {
environment name: 'DEPLOY',value: 'dev'
}
steps{
// npm构建
script {
sh '''
/usr/local/bin/cnpm install
/usr/local/bin/npm run build
'''
}
}
}
stage('上传制品') {
when {
environment name: 'DEPLOY',value: 'dev'
}
steps{
script {
sh '''
cp package.json dist/
cd dist/
/usr/local/bin/npm publish --registry=http://nexus_ip:PORT/repository/npm-repository/
'''
}
}
}
stage('部署到开发环境') {
when {
environment name: 'DEPLOY',value: 'dev'
}
steps {
script {
sh '''
#调用发布节点环境中的版本备份脚本
ssh ${server_user}@${dev_serverIP} "/script/web_client.sh"
ssh ${server_user}@${prod_serverIP} "/script/web_client.sh"
scp -r ./dist/* ${server_user}@${dev_serverIP}:${CODE_DIR}/package
'''
}
}
}
stage('部署到测试环境') {
when {
environment name: 'DEPLOY',value: 'test'
}
steps {
script {
sh '''
ssh ${server_user}@${test_serverIP} "/script/web_client.sh"
#调用下载制品脚本,并进行解压到目标目录下
ssh ${server_user}@${test_serverIP} "cd /opt/web_code && /script/wget_nexus ${Package} && tar -xf *.tgz -C ${CODE_DIR} && rm -f *.tgz"
'''
}
}
}
stage('进行访问测试') {
steps {
script {
sh 'curl -I ${HTTP_URL}'
}
}
}
}
#下面执行构建消息通知,需要安装企业微信插件
post {
success {
script {
if ("${DEPLOY}" == "uat" || "${DEPLOY}" == "prod") {
qyWechatNotification mentionedId: '',
mentionedMobile: '',
webhookUrl: ''
}
else {
qyWechatNotification mentionedId: '',
mentionedMobile: '',
webhookUrl: ''
}
}
}
failure {
script {
if ("${DEPLOY}" == "uat" || "${DEPLOY}" == "prod"){
qyWechatNotification mentionedId: '',
mentionedMobile: '',
webhookUrl: ''
}
else {
qyWechatNotification mentionedId: '',
mentionedMobile: '',
webhookUrl: ''
}
}
}
}
}
2.2:Shell脚本
#在各个目标节点服务器上编辑shell脚本,用来从nexus下载制品
[root@localhost ~]# cd /script/wget_nexus
#!/bin/bash
wget --user="nexus用户" --password="nexus密码" $1 &>/dev/null
- 注:如果想要该脚本中的账号密码不在pipeline中进
文章来源(Source):https://www.dqzboy.com 行显示,可以将脚本文件通过shc的方式进行加密;也防止别人可以直接看到脚本中存储的nexus账号密码
2.3:创建目录
- 在各个节点上创建制品临时存储目录
[root@dev-server ~]# mkdir -p /opt/web_code
[root@dev-server ~]# chown -R appadmin. /opt/web_code
- 在各个节点上创建程序存储目录
[root@dev-server ~]# mkdir -p /data/web_client/package
[root@dev-server ~]# chown -R appadmin. /data/web_client/package
3、配置JOB
- 所需插件:
- Nexus Artifact Uploader:上传制品到制品库
- Nexus Platform:一个将Nexus Repository Manager和Nexus Lifecycle集成到Jenkins作业中的插件




- 注意:只需要在开发环境中配置REVISION即可,其他环境无需该参数




4、执行JOB



- 部署到测试环境


必须 注册 为本站用户, 登录 后才可以发表评论!