基于gitlab和docker构建持续集成环境(一)

本文的目标是构建一个用于开发的持续集成环境,简单来说就是程序员写完代码,一旦push,测试环境就更新了,这样测试人员就可以去测试bug是不是改好了。需求简单粗暴,实现起来还是得费点事。当然所谓CI,远比本文的介绍来的高端,后续博客我会继续研究。

好了,开工

首先感谢下,本文着重参考的几篇文章:
Angular 容器部署
Gitlab+Gitlab-CI+Docker实现持续集成(CI)与持续部署(CD)
GitLab Runner
Docker — 从入门到实践

1.工欲善其事,必先利其器

docker

gitlab

  • 安装gitlab,由于我很早就装了gitlab,版本还停留在9.2.7,这次架构CI,本来想要升级到最新版本的,因为听说11.x的版本有个auto devops,应该可以省去很多配置。不过gitlab的升级不能跨大版本,后面我也就没升级了。
  • 安装gitlab-runner,参考官方文档Install GitLab Runner manually on GNU/Linux
    这里注意要把gitlab-runner这个用户加到之前建立的docker用户组里面,命令为
    usermod -aG docker gitlab-runner
    
  • 创建gitlab项目,设置gitlab-runner。创建项目比较简单,我们肯定也已经有了不少项目了。找一个项目,设置这个项目的Specific Runners。由于gitlab版本不同,设置的地方可能大同小异。我这个版本如下:
    在这里插入图片描述
    上图中绿框中即我针对这个项目设置的gitlab runner,至于如何设置,其实是要到安装gitlab-runner的服务器上面注册,注册的过程中会用到上图红框中的信息。注册的命令为
    gitlab-runner register
    
    执行者选shell在这里插入图片描述

2.交出大日如来咒

Dockerfile

以下是针对angular项目的dockerfile,其他项目类似。具体如何配置,不在本文赘述了。

# Stage 1
FROM node:latest as node

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

RUN npm run dev

# Stage 2
FROM nginx:latest

RUN rm -rf /usr/share/nginx/html/*

COPY --from=node /usr/src/app/dist/demo /usr/share/nginx/html

COPY _nginx/default.conf /etc/nginx/conf.d/

CMD ["nginx", "-g", "daemon off;"]

docker-compose.yml

version: '2.3'

services:
  demo:
    hostname: localhost
    container_name: demo-container
    build: .
    ports:
      - 8001:80

.gitlab-ci.yml

这个文件是核心,当然这个文件里面的很多配置我还没去深入研究,目前这个只是最精简版本。只用到了job,stage,only,script几个参数,其中script里面的脚本即用来构建docker容器的。

deploy_stage:
  stage: deploy
  only:
    - master
  script:
    - docker-compose up -d --build --force-recreate

以上三个文件,是docker和gitlab-ci的核心配置文件,必须放在项目的根目录。

万事俱备只欠东风

接下来只要,我们做一次push,gitlab-ci就能接受到这次push,然后调用设置的runner去执行.gitlab-ci.yml中写的脚本了,即将我们的项目容器更新一遍。
在这里插入图片描述

补充

nginx

在dockerfile里面有这么一行配置

COPY _nginx/default.conf /etc/nginx/conf.d/

即将项目里面预先设置好的nginx conf文件,拷贝到docker里面nginx中,然后在127.0.0.1:8001中运行,这样,我们就在物理服务器中nginx反向代理到docker中的nginx了。具体配置参考这里Angular 容器部署

遇到的几个问题:
  1. sudo netstat -ntpl
    只显示tcp6的,但其实是监听了tcp的,所以不用理会。但我确实碰到nginx无法反向代理到127.0.0.1的情况,然后我大概是通过关闭防火墙解决的,这里有待确认!
  2. npm install的时候提示node-sass无法下载,然后它自动编译了一个,这里确实浪费了资源,但好在npm install 只在第一次构建的时候会跑,在package.json不改变的情况下,无需理会这个问题
  3. 用gitlab-runner启动docker时候报错 Couldn’t connect to Docker daemon at http+docker://localunixsocket - is it running? 解决方式为:将gitlab-runner的用户加入docker组,usermod -aG docker gitlab-runner
  4. sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner报错,参考sudo 执行提示 Command not found
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

F_angT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值