前言

最近一直在想学习一下CI/CD的整个流程,公司代码仓库的管理是用的GitLab刚好在上面看到了CI/CD,所以这里我就想用GitLab去使用一个项目的CI/CD。

公司使用的Azure DevOps,使用了半年这个产品我说说我的感受:

首先说说DevOps,DevOps为也是最近半年才听说,DevOps这个概念早在2009年就开始提出了,从字面上理解拆成Dev(开发)+Ops(运维)的集成。从知乎上看到:DevOps强调的是高效组织团队之间如何通过自动化工具的沟通和协作来完成软件的生命周期管理,从而更快,更频繁的交付稳定的软件
目前我们公司在Azure DevOps实现了产品需求,测试,CI/CD的管理,总体而言较传统的开发模式效率提升了不少。

CI/CD

现在市面上支持CI/CD的产品有许多,我说知道的就有包括Jenkins,GitLib,Azure DevOps,相信现在跟多项目都是使用的Jenkins进行的CI/CD,我也不怎么熟悉也不做过多的描述,而Azure DevOps CI/CD的工具都是图形化的操作友好许多。

基于Docker部署GitLib Runner

GitLib Runner运行在Docker能够快速运行起来,Docker镜像里的GitLib Runner都配置好的,能够做到一次打包多地运行,只需要装好Docker运行环境。

1. 部署环境
  1. Docker: Docker version 18.09.7
  2. Docker-compose: docker-compose version 1.24.0
  3. GitLab: 12.5.0
  4. GitLab Runner: 12.5.0
2. 环境准备
2.1 下载安装包
  • 创建目录: /data/docker/runner/environment
  • 下载JDK: jdk-8u231-linux-x64.tar.gz, 复制到 /data/docker/runner/environment目录下
  • 下载Maven: apache-maven-3.6.3-bin.tar.gz, 复制到/data/docker/runner/environment目录下

TODO描述GitLab Runner运行流程

这里下载JDK和Maven安装包是可以将GitLab Runner容器本身可以作为一个打包的节点。

2.2编写Dockerfile

进入/data/docker/runner/environment目录创建文件Dockerfile

FROM gitlab/gitlab-runner
MAINTAINER yjyzsl <yjyzsl@126.com>

# 修改软件源
RUN echo 'deb https://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse' > /etc/apt/sources.list && \
    echo 'deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse' >> /etc/apt/sources.list && \
    echo 'deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse' >> /etc/apt/sources.list && \
    echo 'deb https://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse' >> /etc/apt/sources.list && \
    apt-get update -y && \
    apt-get clean

# 安装 Java
RUN mkdir -p /usr/local/java
WORKDIR /usr/local/java
COPY jdk-8u231-linux-x64.tar.gz /usr/local/java
RUN tar -zxvf jdk-8u231-linux-x64.tar.gz && \
    rm -fr jdk-8u231-linux-x64.tar.gz

# 安装 Maven
RUN mkdir -p /usr/local/maven
WORKDIR /usr/local/maven
# RUN wget http://apache.crihan.fr/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
COPY apache-maven-3.6.3-bin.tar.gz /usr/local/maven
RUN tar -zxvf apache-maven-3.6.3-bin.tar.gz && \
    rm -fr apache-maven-3.6.3-bin.tar.gz
# COPY settings.xml /usr/local/maven/apache-maven-3.6.3/conf/settings.xml

# 配置环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_231
ENV MAVEN_HOME /usr/local/maven/apache-maven-3.6.3
ENV PATH $PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

WORKDIR /

通过Dockerfile构建一个可以Maven编译打包的环境

2.3 编写docker-compose.yaml

/data/docker/runner目录下创建docker-compose.yaml,
将gitlab-runner容器的文件映射到宿主机目录上

version: '3.1'
services:
  gitlab-runner:
    build: environment
    restart: always
    container_name: gitlab-runner
    privileged: true
    volumes:
      - ./config:/etc/gitlab-runner
      - /var/run/docker.sock:/var/run/docker.sock
3. 部署启动
3.1. 通过docker-compose启动
docker-compose -f docker-compose.yaml up -d
3.2. 注册Runner

其中GitLab地址和GitLab Token在 Project --> Settings --> CI/CD --> Runners 中查看

docker exec -it gitlab-runner gitlab-runner register

# 输入 GitLab 地址
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://xxx.xxx.xxx.xxx/

# 输入 GitLab Token
Please enter the gitlab-ci token for this runner:
cXxxxxxxxxxxxxxu

# 输入 Runner 的说明
Please enter the gitlab-ci description for this runner:
my-runner

# 设置 Tag,可以用于指定在构建规定的 tag 时触发 ci
Please enter the gitlab-ci tags for this runner (comma separated):
maven

# 选择 runner 执行器,这里我们选择的是 docker
Please enter the executor: virtualbox, docker+machine, parallels, shell, ssh, docker-ssh+machine, kubernetes, docker, docker-ssh:
docker

# 选择镜像
maven:3-jdk-8

注册完之后,如下图显示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ptLARxs4-1582982682899)(en-resource://database/1541:1)]

4. 测试GitLab CI
4.1. 编写.gitlab-ci.yml
stages:
- build
- package
build:
  stage: build
  tags:
  - maven-3.6
  script:
  - echo "=============== mvn compile ==============="
  - mvn compile
package:
  stage: package
  tags:
  - maven-3.6
  script:
  - echo "===============  mvn package  ==============="
  - mvn package

提交到Gitlab上,在CI/CD --> Piplelines 下会看到刚刚提交的代码会触发一次CI任务,如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Oj6tNRa7-1582982682912)(en-resource://database/1543:1)]

对应的日志如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r0J5yyXh-1582982682918)(en-resource://database/1545:1)]

本文参考

  1. 基于 Docker 安装 GitLab Runner
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐