gitlab runner + docker 自动构建
Contents
最开始的时候,我尝试Jenkins
+docker
,可是Jenkins
的docker
依赖和插件,实在太过麻烦,配置项等等,太重。所以我转为使用gitlab runner
来实现自动构建并打包镜像。
准备工作
- 安装
docker
- 在
docker
同一个机器上安装gitlab runner
- 配置
.gitlab-ci.yml
安装Docker
参考官方文档,唯一需要注意的是,需要将镜像仓库地址修改为私有的地址。可以通过配置Deamon.json
实现。具体配置如下。
registry-mirrors
代表私有仓库地址,insecure-registries
的作用是,push
指向的地址。
Docker自从1.3.X之后docker registry交互默认使用的是HTTPS,所以这里最好直接指定仓库地址,不然push的时候会报错。
1 2 3 4 5 6 7 8 9 10 | { "registry-mirrors": [ "http://registry.******.com:5000" ], "insecure-registries": [ "registry.******.com:5000" ], "debug": true, "experimental": false } |
安装gitlab runner
服务器是centos 7
,以下的步骤都是基于centos 7
下载二进制安装文件
1
| curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash |
安装
1
| sudo yum install gitlab-runner |
注册Runner
1
| sudo gitlab-runner register |
填入填入私有gitlab的url
1 2
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com ) https://gitlab.******.com
输入项目的gitlab token
1 2
Please enter the gitlab-ci token for this runner xxx
添加runner描述
1 2
Please enter the gitlab-ci description for this runner jiedu-ci
添加描述标签,若添加多个需用逗号隔开
1 2
Please enter the gitlab-ci tags for this runner (comma separated): ci,shws,jiedu
选择runner 运行模式 这里我选择的Docker,因为我们要使用docker 镜像以及一些其他的镜像
其他的我也不是很了解
1 2 | Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell: docker |
设置基础镜像
1 2
Please enter the Docker image (eg. ruby:2.1): registry.******.com:5000/dzjz/ci/maven
配置gitlab runner
1
| vi /etc/gitlab-runner/config.toml |
写入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | concurrent = 1 check_interval = 0 environment = ["MAVEN_HOME=/path/to/maven"] [[runners]] name = "shws-ci" url = "http://gitlab.******.com" token = "234234*******************" executor = "docker" output_limit = 208192 [runners.docker] tls_verify = false image = "registry.******.com:5000/dzjz/ci/maven" privileged = true cache_dir = "cache" disable_cache = false volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache","/root/.m2:/root/.m2"] shm_size = 0 pull_policy = "if-not-present" [runners.cache] |
当然这个部分后期会进一步完善修改,目前只是一个示例。
配置.gitlab-ci.yml
这一部分,具体可以参考官方文档以及这篇,项目的配置如下:
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 | # 定义stages stages: - build - push # 构建各个依赖组件的jar包,并复制Dockerfile对应位置等待构建. build-job: # image: registry.******.com:5000/dzjz/ci/maven stage: build only: - feature/20180428-1.0.0.0script1-第二版 script: - mkdir -p jd-ci/shws/kf - cd shws/ && pwd - mvn clean install -U - echo '准备发布生活卫生镜像到私有镜像仓库!' - rm -rf src/dockerfile/*.war - cd .. && pwd - cp -r shws/target/shws.war shws/src/dockerfile/Dockerfile jd-ci/shws/kf - cd jd-ci/shws/kf/ && ls ## 下面这个配置的作用是在不同的job间传递共享war包以及Dockerfile artifacts: name: "${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG}" paths: - jd-ci/shws/kf/* expire_in: 1 day push-job: stage: push only: - feature/20180428-1.0.0.0script1-第二版 image: registry.******.com:5000/docker:latest services: - registry.******.com:5000/docker:dind before_script: - docker info script: - echo '准备构建镜像并push到私有仓库' #- cd ./jd/shws/kf/ && ls - docker stop shws-kf || true - docker rm -f shws-kf || true - docker rmi registry.******.com:5000/cdjd/shws-kf || true - docker build -t registry.******.com:5000/cdjd/shws-kf ./jd-ci/shws/kf/ - docker push registry.******.com:5000/cdjd/shws-kf - rm -rf jd-ci/shws/kf |
这个配置文件中,only
部分代表你的分支,script部分代表对应的脚本。其他业务系统需要替换的东西(比如构建镜像的名字,缓存的名称,这些可以自定义)。
结束
以上就是gitlab runner
+ docker
实现自动构建打包镜像并上传的简单教程。