Jenkins 构建前端镜像并上传到制品库
Opened this issue · 0 comments
Jenkins 构建前端镜像并上传到制品库
Jenkins 登录认证制品库
想使用 Jenkins
推送镜像到制品库,必须先登录制品库。进入 Jenkins
容器,使用 docker login
登录,然后退出即可:
docker exec -it jenkins /bin/bash
docker login 制品库地址:端口
exit;
Nginx 服务器登录认证制品库
编辑 /etc/docker/daemon.json
文件,将制品库地址写入,然后重启 docker
服务
vi /etc/docker/daemon.json
sudo systemctl daemon-reload
sudo systemctl restart docker
docker login 制品库地址:端口
使用 DockerFile 构建前端镜像
在此之前,我们使用** 构建压缩包 => 直接上传到目标服务器 => 进行解压部署 的方式部署前端。
在这里,我们更换为部署docker镜像。既然要制作自己的镜像,那就少不了 DockerFile。
在前面我们写到过,DockerFile 是一个镜像制作过程的步骤描述。那么我们也可以简单的描述下我们自己的步骤。
我们在代码目录下,新建一个文件。叫 Dockerfile (注意,file全小写):
FROM nginx:1.15-alpine
COPY dist /usr/share/nginx/html
WORKDIR /usr/share/nginx/html
此Dockerfile声明了以下步骤:
- 拉取一个
nginx 1.15-alpine
版本的镜像。 - 将当前目录下的
dist
文件夹拷贝到镜像的/usr/share/nginx/html
文件夹。 - 声明启动容器时,在
/usr/share/nginx/html
下面执行。
接着提交到代码库中。
修改 Jenkins 执行脚本
我们打开之前 Jenkins
任务的编辑页面,改为以下脚本:
set -e
timestamp=`date '+%Y%m%d%H%M%S'`
node -v
npm -v
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install
npm run build
# 编译docker镜像
docker build -t 172.16.81.150:8082/fe/nginx-fe-$timestamp .
# 推送docker镜像到制品库
docker push 172.16.81.150:8082/fe/nginx-fe-$timestamp
# 远程执行命令部署镜像
ssh -o StrictHostKeyChecking=no root@172.16.81.151 "docker pull 172.16.81.150:8082/fe/nginx-fe-$timestamp && \
docker stop jenkins-test && \
docker rm jenkins-test && \
docker run -p 80:80 -itd \
--name jenkins-test \
--restart always \
172.16.81.150:8082/fe/nginx-fe-$timestamp"
在shell脚本中,声明一个变量只需要 变量名=值 即可。在命令中用 $-变量名 进行使用。
timestamp=date '+%Y%m%d%H%M%S'
:这个代表执行 date '+%Y%m%d%H%M%S' 这条命令,并赋值给 timestamp 这个变量。
date '+%Y%m%d%H%M%S' 代表输出当前时间的年月日时分秒
StrictHostKeyChecking: https://cikeblog.com/ssh-cant-established.html
这里可以看到,我们将之前脚本后半部分的流程:
压缩打包资源 => 通过 scp
上传压缩包** => ssh
远程执行解压部署命令
替换为:
Dockerfile构建镜像 => 上传镜像到制品库 => 远程执行命令拉取镜像,停止容器,删除容器,启动新拉取的镜像