持续集成与持续部署(四)05-Jenkins——Jenkins在前端项目中的应用-Jenkins发布到Nginx Docker容器
前端项目中的应用
插件推荐:
-
nodejs插件
主要是用于不同版本的Node打包
特别需要注意的是,使用
jenkinsci/blueocean
镜像的同学,需要重新运行新的容器,以便nodejs插件生效。docker run \ -itd \ -u root \ -p 8080:8080 \ -v /var/jenkins_home:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /usr/bin/docker:/usr/bin/docker \ --name jenkins-master \ jenkins/jenkins
注意:
docker stop 容器名称
去停止之前的容器! -
Publish Over SSH
用于构建完成之后,推送到远程的web服务器
Jenkins发布到Nginx Docker容器:
# !bin/bash
node -v
cnpm install
npm run build
ls -la
if [ "$(docker inspect -f '{{.State.Running}}' nginx)" = "true" ]; then
docker stop nginx && docker rm nginx;
fi
docker run -itd --name nginx -v `pwd`/dist:/usr/share/nginx/html -p 20000:80 nginx
Pipleline演示:
pipeline {
agent {
docker {
image 'node:10'
args '-p 20000:8080'
}
}
stages {
stage('Build') {
steps {
sh 'yarn install'
}
}
stage('Deploy') {
steps {
sh './scripts/deploy.sh'
input 'Finished using the web site? (Click "Proceed" to continue)'
sh './scripts/kill.sh'
}
}
}
}
deploy.sh
文件
#!/usr/bin/env sh
set -x
npm run serve &
sleep 1
echo $! > .pidfile
set +x
echo 'Now...'
echo 'Visit http://localhost:8080 to see your Node.js/Vue application in action.'
set命令用法:
set指令能设置所使用shell的执行方式,可依照不同的需求来做设置
-a
标示已修改的变量,以供输出至环境变量。
-b
使被中止的后台程序立刻回报执行状态。
-C
转向所产生的文件无法覆盖已存在的文件。
-d
Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。
-e
若指令传回值不等于0,则立即退出shell。
-f
取消使用通配符。
-h
自动记录函数的所在位置。
-H
Shell 可利用"!"加<指令编号>的方式来执行history中记录的指令。
-k
指令所给的参数都会被视为此指令的环境变量。
-l
记录for循环的变量名称。
-m
使用监视模式。
-n
只读取指令,而不实际执行。
-p
启动优先顺序模式。
-P
启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接。
-t
执行完随后的指令,即退出shell。
-u
当执行时使用到未定义过的变量,则显示错误信息。
-v
显示shell所读取的输入值。
-x
执行指令后,会先显示该指令及所下的参数。
+<参数>
取消某个set曾启动的参数。
kill.sh
文件:
#!/usr/bin/env sh
echo 'The following command terminates the "npm run serve" process using its PID'
echo '(written to ".pidfile"), all of which were conducted when "deloy.sh"'
echo 'was executed.'
set -x
kill $(cat .pidfile)
思路:
- 使用一台单独的Nginx服务器发布,使用Publish Over SSH插件上传
- 使用Docker在本地发布或者远程发布
- 使用Dockerfile进行镜像内的构建,使用docker镜像进行发布