Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Jenkins 构建前端镜像并上传到制品库 #54

Open
YIngChenIt opened this issue Aug 4, 2020 · 0 comments
Open

Jenkins 构建前端镜像并上传到制品库 #54

YIngChenIt opened this issue Aug 4, 2020 · 0 comments

Comments

@YIngChenIt
Copy link
Owner

YIngChenIt commented Aug 4, 2020

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

image.png


接着使用 docker login 命令进行登录

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声明了以下步骤:

  1. 拉取一个 nginx 1.15-alpine 版本的镜像。
  2. 将当前目录下的 dist 文件夹拷贝到镜像的 /usr/share/nginx/html 文件夹。
  3. 声明启动容器时,在 /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构建镜像 => 上传镜像到制品库 => 远程执行命令拉取镜像,停止容器,删除容器,启动新拉取的镜像

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant