Jenkins 流水线语法自动部署
Jenkins 流水线语法自动部署
Jenkins自动编译自动部署要完成以下几个任务
1、拥有NodeJS环境,执行npm i & npm run build
指令,在工作空间打出dist包
2、利用Dockfile制作以nginx为基础镜像的前端镜像
3、镜像上传到镜像库
4、在服务器上部署Docker镜像
可以按如下步骤验证此功能。
初始化Vue3.0工程
创建本地vue3.0工程,并将代码提交到gitlab上。
安装NodeJS插件
如果还没安装NodeJS插件,先去系统的插件管理里面安装NodeJS插件。插件安装好了之后再去全局配置中配置NodeJS版本,并为之取一个别名(别名会在脚本中引用)。步骤参考Jenkins使用笔记。
我本地安装的Node是14.17.5版本,所以Jenkins全局配置此版本,别名为Nodev14.17.5
创建Jenkinsfile
Jenkinsfile采用声明式脚本语法。
pipeline {
agent any
stages {
stage('Stage 1: Build') {
steps {
sh 'echo 1.exec Nodev14.17.5.'
nodejs("Nodev14.17.5") {
sh("node -v && npm -v")
sh("npm install")
sh("npm run build")
}
}
}
stage('Stage 2: Mack image') {
steps {
echo '1.shell chmod.'
sh 'chmod 777 ./cicd/*.sh'
echo '2.exec mackimage'
sh './cicd/mackimage.sh'
}
}
}
post {
always {
echo 'This will always run'
}
success {
echo 'This will run only if successful'
}
failure {
echo 'This will run only if failed'
}
}
}
nodejs("Nodev14.17.5")
括起来的区域可使用npm
指令。
第二步Docker命令太多,所以编写成shell脚本,归档在/cicd/
下。注意,执行shell脚本前应赋予用户可执行权限,否则会报权限相关错误,此处简单处理为所有用户都能执行chmod 777
。
如果对安全要求很严格,777权限可能不合适了。应修改Jenkins用户为root
权限或者给jenkins用户添加对应文件权限。(我使用Docker部署的jenkinsci/blueocean,/etc
下没有sysconfig目录,找不到对应权限配置的文件)
makimage.sh内容如下:
docker -v
#登录镜像库
docker login -u longdage -p xxxx
#制作docker镜像,注意末尾有个[.]指代Dockerfile操作的文件路径
docker build -t automatic-deployment .
#打标签,可以在build步骤一步到位
docker tag automatic-deployment longdage/automatic-deployment:v0.0.1
#将镜像传到镜像库
docker push longdage/automatic-deployment:v0.0.1
#删除老实例,重做新镜像实例
docker stop myApp || true \
&& docker rm myApp || true \
&& docker run -d -p 8989:80 --name myApp longdage/automatic-deployment:v0.0.1
#退出登录
docker logout
Dockerfile内容如下:
FROM nginx
COPY dist/ /usr/share/nginx/html
以nginx
为基础镜像,将前端包dist目录下所有静态资源拷贝到nginx
的html
目录下。nginx
默认配置自动监听http
的80
端口和https
的443
端口,创建docker
容器时要映射80
端口或者443
端口。
也可以替换成自定义nginx.conf
文件,Dockerfile
多拼接一个替换步骤,此处不做详细记录。
附录
问题1:jenkins中npm安装慢
换npm源,可以维护自己的内源,100M+的下载速度。
在Jenkins使用Docker
Jenkins可以使用docker插件直接调用相关API进行构建部署。
详情参考