git在CICD实践中的应用11:gitee仓库webhook使用(下)

一、背景

上一文中,我们使用nodejs作为webhook触发的脚本,但是实现的不好,配置不如jenkins那样方便,因此,这个脚本需要适时修改。为了配合本系列主题,本文使用docker来部署这个脚本——此处更应该称之为服务,一个专门响应gitee仓库webhook的服务。当我们修改了脚本文件,并提交代码后,自动构建、部署。
为方便起见,我们使用gitlab托管nodejs代码,在.gitlab-ci.yaml文件中做构建和部署的动作。
——是的,gitlab本身具备“提交自动触发构建”的环境,但gitee不具备,所以利用gitlab在gitee上完成gitlab应有的功能。

二、概述

操作要点描述如下:

  1. 在Gitlab构建脚本中,将所需的文件拷贝到云主机上。
  2. 在云主机上构建镜像。

三、实验

Dockerfile文件:

FROM node:alpine

LABEL maintainer Late Lee([email protected])
# Create app directory
RUN mkdir -p /home/Service
WORKDIR /home/Service
 
# Bundle app source
COPY . /home/Service
RUN npm install

EXPOSE 4000

CMD [ "node", "server.js" ]

说明:

  1. 基于node基础镜像构建。
  2. 创建Docker镜像,内含node运行环境。
  3. 将运行所需文件拷贝到镜像中,开放4000端口,在启动容器时运行nodejs文件。

.gitlab-ci.yml文件:

send_job:
  before_script:
    - apt-get update -qq && apt-get install -y sshpass
  script:
    - pwd
    - ls -a
    # 此处进行编译、构建等操作

  after_script:
    - echo "will try to build docker in remote host..."
    # 拷贝临时文件,使用-p,防止出错
    - sshpass -p "$PASSWD" ssh -o StrictHostKeyChecking=no $USER@$HOST "mkdir -p /tmp/gitee-koa" 
    # 拷贝文件
    - sshpass -p "$PASSWD" scp -o StrictHostKeyChecking=no Dockerfile package.json koa_gitee.js $USER@$HOST:/tmp/gitee-koa 
    # 构建docker
    - sshpass -p "$PASSWD" ssh -o StrictHostKeyChecking=no $USER@$HOST "cd /tmp/gitee-koa;docker build -t gitee-koa ." 
    # 先删除,再运行docker
    - sshpass -p "$PASSWD" ssh -o StrictHostKeyChecking=no $USER@$HOST "cd /tmp/gitee-koa;docker rm -f gitee-koa;docker run --name gitee-koa -p 4000:4000 -itd gitee-koa" 
    
  only:
    - master

说明:

  1. 在远程主机创建临时目录。
  2. 将必要的文件拷贝到该目录。
  3. 创建docker镜像。
  4. 删除docker容器并重新运行,容器名称为gitee-koa。注意云主机要开放4000端口。
  5. 使用sshpass操作远程主机。
  6. 密码、用户名、主机名称,均使用Gitlab的环境变量保存。配置界面如图1所示。
    在这里插入图片描述
    图1

四、测试

当提交代码时,Gitlab自动构建,如图2所示:
在这里插入图片描述
图2
当构建成功后,云主机已经重新启动了docker。可以用docker ps gitee-koa查看,图3为响应WebHook的日志:
在这里插入图片描述
图3

五、小结

本文假设脚本文件含有涉密内容,所以不能直接构建好docker上传到如dockerhub这样公开的服务器上,但是,可以选择阿里云docker仓库,阿里云仓库可以为私有。这样一样,就不需要在远程主机上构建docker了。
我们也可以舍弃docker方式,假设云主机具备的nodejs环境,则直接运行js文件即可。
但是,无论哪种方式,其过程本质上是一样的。

前文与本文涉及的WebHook,可适用于GitHub,仅请求数据不同而已。

由于笔者网速慢(最便宜的套餐,连上网络非常卡,而且gitlab和dockerhub服务器还是外面的,从决定做,到预研,到实验,至结束,耗时一个晚上(约4小时)以及一个上午。

发布了481 篇原创文章 · 获赞 244 · 访问量 110万+

猜你喜欢

转载自blog.csdn.net/subfate/article/details/103097235