Docker安装Gitlab、Gitlab-Runner并实现项目CICD

3,713 阅读3分钟

1、安装Gitlab、Gitlab-Runner

新建docker-compose.yml文件


version: '3'

services:
  gitlab:
    image: gitlab/gitlab-ce:latest
    restart: always
    container_name: "gitlab"
    ports:
        - "80:80"
        - "2222:22"
        - "2443:443"
    volumes:
        - /srv/gitlab/config:/etc/gitlab
        - /srv/gitlab/logs:/var/log/gitlab
        - /src/gitlab/data:/var/opt/gitlab
    environment:
        GITLAB_OMNIBUS_CONFIG: |
          external_url 'http://192.0.0.171'
          gitlab_rails["time_zone"] = "Asia/Shanghai"
          gitlab_rails["gitlab_ssh_host"] = "http://192.0.0.171"
          gitlab_rails["gitlab_shell_ssh_port"] = 2222
          nginx["listen_port"] = 80

  gitlab-runner:
    container_name: gitlab-runner
    image: gitlab/gitlab-runner:latest  #7
    restart: always
    extra_hosts:
         - "somehost:192.0.0.171"
    volumes:
       - /srv/gitlab-runner/config:/etc/gitlab-runner
       - /var/run/docker.sock:/var/run/docker.sock
       - /data/.m2/:/.m2/
    environment:
        pull_policy: if-not-present

docker-compose.yml目录下使用docker-compose启动

docker-compose up -d

启动成功后,根据自己的ip+端口即可访问自己的gitlab,自己注册登录即可。

2、配置Gitlab-Runner

2.1、进入Gitlab-Runner容器内

docker exec -it gitlab-runner bash

2.2、注册runner

gitlab-runner register

2.3、输入Gitlab实例的地址

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.0.0.171/

2.4、输入token

token查看位置

Please enter the gitlab-ci token for this runner:
3eJL3283UYjJGp9WxvZG

2.5、输入Runner的描述

Please enter the gitlab-ci description for this runner:
[5ab09191e6bf]: my-runner

2.6、输入与Runner关联的标签

Please enter the gitlab-ci tags for this runner (comma separated):
my-tag,another-tag
Registering runner... succeeded                     runner=3eJL3283

2.7、输入Ruuner的执行者

Please enter the executor: docker, docker-ssh, parallels, ssh, virtualbox, custom, docker+machine, docker-ssh+machine, kubernetes, shell:
docker

2.8、指定docker版本

Please enter the default Docker image (e.g. ruby:2.6):
alpine:latest
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

2.9、修改runner配置

vim /srv/gitlab-runner/config/config.toml

添加下面的内容,重启runner

# 分别是挂载了宿主机的docker和配置Maven的缓存,提高效率
volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock", "/usr/share/maven/ref/:/.m2/"]
# 防止Runner重复拉取镜像
pull_policy = "if-not-present"

注册成功之后,我们可以看到注册的runner

3、创建SpringBoot项目测试CICD

直接新建一个springboot项目,写个简单的测试方法即可。

3.1、项目根目录创建个Dockerfile

FROM openjdk:8-jdk
COPY target/*.jar test.jar
ENV PORT 5000
EXPOSE $PORT
ENTRYPOINT ["java","-Dserver.port=${PORT}","-jar","test.jar"]

3.2、项目根目录创建.gitlab-ci.yml文件

image: docker:latest  #1
variables:  #2
  DOCKER_DRIVER: overlay2
  #  DOCKER_HOST: tcp://172.17.193.109:2375  # docker host,本地可不写
  MAVEN_CLI_OPTS: -s /root/config/settings.xml --batch-mode
  TAG: root/test-springboot:v0.1  # 镜像名称
cache:  #3
  paths:
    - .m2/repository
services:  #4
  - docker:dind
stages:  #5
  - package
  - deploy
  - run
maven-package:  #6
  image: f-maven-v1.0:latest
  tags:
    - my-tag
  stage: package
  script:
    - mvn  clean package -e -Dmaven.test.skip=true
  artifacts:
    paths:
      - target/*.jar
build-master:  #7
  tags:
    - my-tag
  stage: deploy
  script:
    - docker build -t $TAG .
  only:
    - master
run-master: #8
  stage: run
  script:
    - docker rm -f test || true
    - docker run -d --name test -p 5000:5000 $TAG
  only:
    - master
  tags:
    - my-tag

这里自己改了个maven镜像,Dockerfile如下

FROM maven:3.6.0-jdk-8-alpine
COPY settings.xml /usr/share/maven/ref
RUN mkdir -p /usr/share/maven/ref/repository
RUN chmod 777 /usr/share/maven/ref/repository

settings.xml:

<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository>/usr/share/maven/ref/repository</localRepository>
  <mirrors>
     <mirror>
        <id>aliyun-nexus</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      </mirror>
      <mirror>
        <id>CN</id>
        <name>OSChina Central</name>
        <url>http://maven.oschina.net/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>
      </mirror>
  </mirrors>
</settings>

3.3、项目上传到gitlab

gitlab里面新建项目,按步骤上传即可。

打开流水线就可以看到我们的打包部署流程。

3.4、自动CICD测试

第一次运行可能会比较慢,要拉取镜像和依赖包什么的,静静等待即可。

点击任务节点可以看到日志。

最终看到这个日志说明打包部署成功了。

项目的容器也正常启动了。

项目的测试方法访问也没有问题。


欢迎关注个人公众号