Jenkins自动化部署前端工程到nginx容器

1.首先将待部署服务器的公钥填入gitlab中,(在个人-》设置-》SSH keys)
Jenkins自动化部署前端工程到nginx容器_第1张图片
然后在待部署服务器上 执行 ssh-keygen -t rsa 一直回车即可
Jenkins自动化部署前端工程到nginx容器_第2张图片
然后将 /root/.ssh/id_rsa.pub的内容填入gitlab中
在这里插入图片描述
Jenkins自动化部署前端工程到nginx容器_第3张图片
2.在Jenkins的系统管理-》系统设置中将待部署服务器的信息填入
Jenkins自动化部署前端工程到nginx容器_第4张图片
填入后点击Test Configuration按钮测试是否成功。

3.然后点击新建任务-》选择自由风格的的项目、
Jenkins自动化部署前端工程到nginx容器_第5张图片
4.然后根据下图填入信息
Jenkins自动化部署前端工程到nginx容器_第6张图片
5.然后勾选nodejs,这个是用来对前端进行打包的(注:需要安装nodejs插件具体方法查看https://blog.csdn.net/a1035082174/article/details/103836128)
Jenkins自动化部署前端工程到nginx容器_第7张图片
6.然后执行编译命令,在构建-》执行shell
Jenkins自动化部署前端工程到nginx容器_第8张图片
7.执行完成后将文件上传到部署服务器
Jenkins自动化部署前端工程到nginx容器_第9张图片
8.由于需要部署到nginx容器中,所以上传的路径为宿主机的路径,而不是直接上传到容器内,因此在需要脚本中执行传输命令。
脚本bb.sh内容如下
#/bin/bash
docker exec -it nginx /bin/bash -c ‘cd /usr/local/nginx/html && rm -rf *’
docker cp /aifs01/test/iam-admin-web.tar.gz 699fb7a7b38b:/usr/local/nginx/html
docker exec -it nginx /bin/bash -c ‘cd /usr/local/nginx/html && tar -xvf iam-admin-web.tar.gz’
docker exec -it nginx /bin/bash -c ‘cd /usr/local/nginx/html && rm -rf iam-admin-web.tar.gz’
docker stop nginx
docker start nginx

防止工程中后续添加新的文件,因此先把之前的文件删除,然后使用docker cp命令将传到宿主机的文件传到容器中,然后执行解压,解压完成后将安装包删除。
但是在执行的时候报错 cannot enable tty mode on non tty input
Jenkins自动化部署前端工程到nginx容器_第10张图片
经查
https://blog.csdn.net/ggz631047367/article/details/50273153
去掉-t后成功执行
#/bin/bash
docker exec -i nginx /bin/bash -c ‘cd /usr/local/nginx/html && rm -rf *’
docker cp /aifs01/test/iam-admin-web.tar.gz 699fb7a7b38b:/usr/local/nginx/html
docker exec -i nginx /bin/bash -c ‘cd /usr/local/nginx/html && tar -xvf iam-admin-web.tar.gz’
docker exec -i nginx /bin/bash -c ‘cd /usr/local/nginx/html && rm -rf iam-admin-web.tar.gz’
docker stop nginx
docker start nginx

补充:初始的时候在Jenkins配置的时候我执行脚本的命令为bash /aifs01/bb.sh
但是执行的时候报错
ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after 120,001 ms]
Jenkins自动化部署前端工程到nginx容器_第11张图片
经过查资料
https://blog.csdn.net/u013066244/article/details/52788407
找到了解决的方法!
可能的原因是因为,在执行脚本命令时,需要执行容器的命令,进入容器后,脚本就断开了。刚启动,pty(伪终端)就断开连接,
解决的办法就是,让脚步在后台运行,也就即使伪终端断开了,项目依然可以启动完成。

之后我执行的脚本改为

nohup bash /aifs01/bb.sh & sleep 1
还需要注意的地方是,启动成功后,Jenkins控制台会打印这么一句话

nohup: ignoring input and appending output to `nohup.out’

也就是说,当我们使用nohup命令的的时候,日志会被打印到nohup.out文件中去。
如果我们不做任何处理,会随着每次的重新启动,nohup.out会越来越大。
所以我在我执行的脚本中添加了

echo /dev/null>nohup.out

这样每次启动时,都会先清空掉这个文件。
最终的配置文件为:nohup bash /aifs01/bb.sh & sleep 1
脚本文件为
#/bin/sh
echo /dev/null >nohup.out
docker exec -i nginx /bin/bash -c ‘cd /usr/local/nginx/html && rm -rf *’
docker cp /aifs01/test/iam-admin-web.tar.gz 699fb7a7b38b:/usr/local/nginx/html
docker exec -i nginx /bin/bash -c ‘cd /usr/local/nginx/html && tar -xvf iam-admin-web.tar.gz’
docker exec -i nginx /bin/bash -c ‘cd /usr/local/nginx/html && rm -rf iam-admin-web.tar.gz’

docker stop nginx
docker start nginx

你可能感兴趣的:(Jenkins自动化部署前端工程到nginx容器)