gitlab-runner有多种安装方式,具体详见 gitlab-runner安装 ,本文采用的docker的方式进行runner的部署
为什么用docker安装gitlab-runner?
- 1.runner机器经常改变
- 2.每个作业都处于干净的环境中,没有过去的历史记录。并发任务执行正常,因为每个构建都有自己的 Docker 引擎实例,因此它们不会相互冲突
开始安装:
前提安装好docker环境
1.创建并启动gitlab-runner容器
1 2 3 4 5
| sudo docker run -d --name gitlab-runner --restart always -v /var/run/docker.sock:/var/run/docker.sock -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /home/gitlab-runner/shell:/home/gitlab-runner/shell -v /root/build_cache:/cache gitlab/gitlab-runner:latest
|
注:
- 第一个 -v 实现docker.sock的挂载(因为后续要实现docker in docker的使用,即 docker executor);
- 第二个 -v 实现gitlab-runner的配置挂载(可选)
- 第三个 -v 实现gitlab-runner cache目录的挂载(可选),cache相关请参考 docker executor 下的cache部分。
- 第四个 -v 实现本地shell目录挂载(可选)
修改gitlab-runner时区为宿主机时区,因为有可能在gitlab-容器中使用到时间,可以执行该命令:
1
| sudo docker cp /etc/localtime gitlab-runner:/etc/localtime
|
2.注册runner
1 2 3 4 5 6 7 8 9 10 11
| docker exec gitlab-runner gitlab-runner register -n \ --url https://git-pd.megvii-inc.com/ \ --registration-token qZXDG-z3uPGvsVn-5SNx \ --tag-list runInDk \ --executor docker \ --docker-image mrxccc/maven-jdk8-docker:latest \ --docker-volumes /root/.m2:/root/.m2 \ --docker-volumes /root/.npm:/root/.npm \ --docker-volumes /var/run/docker.sock:/var/run/docker.sock \ --docker-volumes /home/gitlab-runner/shell:/home/gitlab-runner/shell \ --description "runInDk"
|
注:
- url 为 gitlab的地址;
- registration-token 为项目下的token,可通过 gitlab -> project -> settings -> ci/cd 下获得
- executor,使用 docker 作为 executor;
- description 为 runner 的描述信息,请自定义;
- docker-image 为 executor 所采用的自己构建的 docker 镜像,该镜像有maven、java、docker、bash环境(会被gitlab-ci.yml中的配置覆盖)。
- docker-volumes ,因采用 “docker executor” ,必须挂载宿主机的docker.sock,
- 挂载.m2文件夹,是为了避免maven每次编译项目时都重新下载jar包。(后面.gitlab-ci.yml文件中使用了maven镜像)
挂载.m2文件夹这一步很重要,不然每次下载依赖包会特别浪费时间
如果想要在docker in docker,也就是在docker容器中使用宿主机的docker,要挂载docker.sock文件,关于为什么要挂载docker.sock,可以参考这篇文章:docker系列-docker.sock探究
mrxccc/maven-jdk8-docker镜像的dockerfile:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| FROM maven:3.6.0-jdk-8-alpine MAINTAINER mrxccc@qq.com ENV TZ=Asia/Shanghai
RUN echo http://dl-cdn.alpinelinux.org/alpine/latest-stable/community >> /etc/apk/repositories &&\ apk update &&\ apk add docker --no-cache &&\ apk add openrc --no-cache
RUN apk add --no-cache tzdata &&\ ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone &&\ rm -rf /var/cache/apk/*
RUN apk add sudo --no-cache CMD service docker start
|
3.编写gitlab-ci
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| variables: MAVEN_CLI_OPTS: "-s ./mvn-settings.xml --batch-mode" SOFT_VERSION: '1.0' SOFT_VERSION_EXT: 'alpha' NEW_SOFT_VERSION_EXT: 'beta' stages: - verify - build - dockerpush before_script: - pwd
unit-test: stage: verify script: - mvn $MAVEN_CLI_OPTS test tags: - runInDk
java-package: stage: build tags: - runInDk cache: key: ${CI_PIPELINE_ID} paths: - ${CI_PROJECT_DIR} script: - docker build registry/imagename-${CI_PIPELINE_ID}:$SOFT_VERSION
docker-push: stage: dockerpush tags: - runInDk cache: key: ${CI_PIPELINE_ID} paths: - ${CI_PROJECT_DIR} script: - docker push registry/imagename-${CI_PIPELINE_ID}:$SOFT_VERSION
|
更多参数操作,可以用:sudo docker exec gitlab-runner gitlab-runner register –help 进行查看
更多精彩内容:mrxccc