Jenkins使用——基于docker镜像nodejs编译打包发布前端项目
Jenkins使用之基于docker镜像nodejs编译打包发布前端项目Jenkins 自动部署Nodejs 项目打开 Blue Ocea项目中添加`Jenkinsfile`文件完成基本的编译与打包自动发布到其他服务器push到gitlab时自动构建准备插件,安装好以下插件SSH Pipeline Steps 在SSH Over Publisher 插件不能用的情况下安装,可以在远程服务器上运行命
Jenkins使用之基于docker镜像nodejs编译打包发布前端项目
准备插件,安装好以下插件
Jenkins 自动部署Nodejs 项目
打开 Blue Ocean
- 创建
流水线
项目
- 选择 git项目,填写git服务项目的URL
- 拷贝公钥添加的git服务器中的SSH key 中
- 点击完成,将自动下载项目的
Jenkinsfile
文件
项目中添加Jenkinsfile
文件
在项目中添加 Jenkinsfile文件,并且提交。Jenkins将根据该文件内容进行构建。
完成基本的编译与打包
先按照插件Docker
。
在Jenkinsfile文件中添加内容如下,保证Jenkins能完成基本的包下载与打包功能。详细如下:
node {
checkout scm
docker.image('node:14-alpine').inside('-v $HOME/node_modules:/node_modules -p 3000:3000') {
stage('Build') {
sh 'yarn config set registry https://registry.npm.taobao.org' //设置国内服务,加速下载
sh 'yarn -v' //查看版本
sh 'yarn' //下载包
sh 'yarn build' //编译打包
sh 'ls -l' //查看目录结构
}
}
}
自动发布到其他服务器
先安装插件 SSH Step Plugin
。
在Jenkins中拷贝文件到远程服务器Web-Server,其代码如下:
def remote = [:]
remote.name = 'Web-Server'
remote.host = 'xxx.xxx.xxx.xxx'
remote.user = 'root'
remote.password = 'yor password'
remote.allowAnyHosts = true
stage('Deploy') {
//一起
//writeFile file: 'abc.sh', text: 'ls -lrt'
//sshScript remote: remote, script: 'abc.sh' //远程执行脚本
// sshCommand remote: remote, command: 'ls -l',
// sshCommand remote: remote, command: "for i in {1..5}; do echo -n \"Loop \$i \"; date ; sleep 1; done" //远程执行命令
sh 'ls -l'
sshRemove remote: remote, path: '/home/warehouse'
sshPut remote: remote, from: 'warehouse', into: '/home'
}
push到gitlab时自动构建
先安装插件 Generic Web Hook
在Jenkins中添加触发器,用于出发Jenkins自动构建,其代码如下:
properties([
pipelineTriggers([
[$class: 'GenericTrigger',
genericVariables: [
[key: 'ref', value: '$.resource.refUpdates[0].name'], //定义变量
//[key: 'ref', value: '$.ref'],
// [
// key: 'before',
// value: '$.before',
// expressionType: 'JSONPath', //Optional, defaults to JSONPath
// regexpFilter: '', //Optional, defaults to empty string
// defaultValue: '' //Optional, defaults to empty string
// ]
],
// genericRequestVariables: [
// [key: 'requestWithNumber', regexpFilter: '[^0-9]', defaultValue:'requestWithNumber_test'],
// [key: 'requestWithString', regexpFilter: '']
// ],
// genericHeaderVariables: [
// [key: 'headerWithNumber', regexpFilter: '[^0-9]', defaultValue:'headerWithNumber_test'],
// [key: 'headerWithString', regexpFilter: '']
// ],
causeString: 'Triggered on $ref',
token: 'VXnNT5X/GH8Rs', //请求的token
tokenCredentialId: '',
printContributedVariables: true,
printPostContent: true,
silentResponse: false,
regexpFilterText: '$ref',
regexpFilterExpression: 'refs/heads/' + BRANCH_NAME
]
])
])
在gitlab 选择push事件,添加 http://JENKINS_URL/generic-webhook-trigger/invoke?token=VXnNT5X/GH8Rs通知。可参考 https://docs.gitlab.com/ee/user/project/integrations/webhooks.html
在开发机器上push代码到git服务器时,将会发送通知请求到Jenkins服务器,Jenkins服务器将自动构建。
完整代码:
node {
properties([
pipelineTriggers([
[$class: 'GenericTrigger',
genericVariables: [
[key: 'ref', value: '$.resource.refUpdates[0].name'], //定义变量
//[key: 'ref', value: '$.ref'],
// [
// key: 'before',
// value: '$.before',
// expressionType: 'JSONPath', //Optional, defaults to JSONPath
// regexpFilter: '', //Optional, defaults to empty string
// defaultValue: '' //Optional, defaults to empty string
// ]
],
// genericRequestVariables: [
// [key: 'requestWithNumber', regexpFilter: '[^0-9]', defaultValue:'requestWithNumber_test'],
// [key: 'requestWithString', regexpFilter: '']
// ],
// genericHeaderVariables: [
// [key: 'headerWithNumber', regexpFilter: '[^0-9]', defaultValue:'headerWithNumber_test'],
// [key: 'headerWithString', regexpFilter: '']
// ],
causeString: 'Triggered on $ref',
token: 'VXnNT5X/GH8Rs', //请求的token
tokenCredentialId: '',
printContributedVariables: true,
printPostContent: true,
silentResponse: false,
regexpFilterText: '$ref',
regexpFilterExpression: 'refs/heads/' + BRANCH_NAME
]
])
])
checkout scm
docker.image('node:14-alpine').inside('-v $HOME/node_modules:/node_modules -p 3000:3000') {
stage('Build') {
sh 'yarn config set registry https://registry.npm.taobao.org' //设置国内服务,加速下载
sh 'yarn -v' //查看版本
sh 'yarn' //下载包
sh 'yarn build' //编译打包
sh 'ls -l' //查看目录结构
}
}
def remote = [:]
remote.name = 'Web-Server'
remote.host = 'xxx.xxx.xxx.xxx'
remote.user = 'root'
remote.password = 'yor password'
remote.allowAnyHosts = true
stage('Deploy') {
//一起
//writeFile file: 'abc.sh', text: 'ls -lrt'
//sshScript remote: remote, script: 'abc.sh' //远程执行脚本
// sshCommand remote: remote, command: 'ls -l',
// sshCommand remote: remote, command: "for i in {1..5}; do echo -n \"Loop \$i \"; date ; sleep 1; done" //远程执行命令
sh 'ls -l'
sshRemove remote: remote, path: '/home/warehouse'
sshPut remote: remote, from: 'warehouse', into: '/home'
}
}
完成以上步骤将可进行自动发布。
- 如有问题欢迎指正,谢谢!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)