前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker搭建自己的Gitlab CI Runner

Docker搭建自己的Gitlab CI Runner

作者头像
哎_小羊
发布2018-01-02 14:45:27
14.3K0
发布2018-01-02 14:45:27
举报
文章被收录于专栏:哎_小羊

目录:

  • Gitlab CI介绍
  • 环境、软件准备
  • 安装、注册并启动Gitlab Runner
  • 定义项目构建流程
  • FAQ

1、Gitlab CI介绍

CI:持续集成,我们通常使用CI来做一些自动化工作,比如程序的打包,单元测试,部署等,这种构建方式避免了打包环境差异引起的错误,提高了工作效率。Gitlab-CI是Gitlab官方提供的持续集成服务,我们可以在仓库的根目录下新建.gitlab-ci.yml文件,自己定义持续集成流程模板,并且在Gitlab中配置runner,在之后的每次提交合并中将会触发构建,并且可以通过Gitlab的hook, 在代码提交的各个环节自动地完成一系列的构建工作,总之对于一些非复杂性的集成需求,都是可以满足的。

2、环境、软件准备

本次演示环境,我是在本机mac上操作,以下是我本地软件及版本:

  1. Git:git version 2.10.1 (Apple Git-78)
  2. Docker: Version 17.03.0-ce-mac1 (15583)
  3. Gitlab: GitLab Community Edition 8.17.4
  4. Gitlab Runner: Version 1.11.2

注意:本次我们使用选择docker作为runner的executor,也或者可以使用docker安装Gitlab Runner,所以我们需要提前安装docker环境。Git是开源的分布式版本控制系统,Gitlab、Runner都需要依赖它,所以我们也需要提前安装好git环境。这里我就忽略git、docker、gitlab的安装过程,着重说下Gitlab CI Runner安装以及如何跑项目构建流程。

3、安装、注册并启动Gitlab Runner

Gitlab Runner安装方式有两种,一种是直接二进制文件安装,一种是基于docker镜像安装。 方式一:二进制文件安装 1)下载对应操作系统的二进制包,我这里使用的是mac版本

代码语言:javascript
复制
sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-ci-multi-runner-darwin-amd64

2)给gitlab-runner赋可执行权限

代码语言:javascript
复制
sudo chmod +x /usr/local/bin/gitlab-runner

3)注册runner

代码语言:javascript
复制
# gitlab-runner register

Please enter the gitlab-ci coordinator URL:
# 示例:http://gitlab.alibaba-inc.com/ci
Please enter the gitlab-ci token for this runner:
# xxxxxx
Please enter the gitlab-ci description for this runner:
# 示例:qd_api_runner
Please enter the gitlab-ci tags for this runner (comma separated):
# 示例:hwy
Whether to run untagged builds [true/false]:
# true
Please enter the executor: docker, parallels, shell, kubernetes, docker-ssh, ssh, virtualbox, docker+machine, docker-ssh+machine:
# docker
Please enter the default Docker image (e.g. ruby:2.1):
# maven:3-jdk-8

说明: 1、gitlab ci的地址以及token,从你要配置该runner到哪个项目,就去gitlab下该项目首页右侧设置—》CI/CD Pipelines—》Specific Runners下可以找到。 2、gitlab-ci tags这个很重要,在项目构建流程yaml文件里面指定tag,就是匹配使用哪个tag的runner,这里我定义了hwy,回头再配置文件里面就指定这个tag。 3、executor:执行者可以有很多种,这里我们使用docker,方便构建执行。 4、Docker image:构建Docker image时填写的image名称,根据项目代码语言不同,指定不同的镜像。我这里项目是java语言的,所以我使用官方maven:3-jdk-8镜像。

4)安装并启动gitlab-runner

代码语言:javascript
复制
cd ~
gitlab-runner install
gitlab-runner start

方式二:docker镜像安装

1)拉取gitlab-runner镜像

代码语言:javascript
复制
sudo docker pull gitlab/gitlab-runner:latest

2)添加gitlab-runner container

代码语言:javascript
复制
sudo docker run -d --name gitlab-runner --restart always \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  gitlab/gitlab-runner:latest

3)注册runner

代码语言:javascript
复制
sudo docker exec -it gitlab-runner gitlab-ci-multi-runner register

注册过程略,方式同方式一步骤3.

方式一和方式二,若是runner注册成功,此时到我们项目首页右侧设置—》CI/CD Pipelines—》Runners activated for this project就可以看到我们刚注册的qd_api_runner了。如图:

4、定义项目构建流程

项目的构建流程是由项目根目录的.gitlab-ci.yml文件控制的,关于gitlab-ci详细的配置文档可以查看 这里 , 以下是一个简单的Java Maven项目的例子.gitlab-ci.yml:

代码语言:javascript
复制
image: maven:3-jdk-8

test:
  stage: test
  script: 
    - mvn test
  tags:
    - hwy

我们提交该文件到gitlab对应项目上去。

代码语言:javascript
复制
git add .gitlab-ci.yml
git commit -m "Add .gitlab-ci.yml"
git push origin develop

这个时候,我们从该项目的Pipelines选项卡下可以看到,有正在运行的刚新建的hwy的这个runner的pipelines了。点击进去可以看到控制台实时输出日志。如图:

上面是一个简单的demo实例,一个pipeline只有一个job的类型,一般我们CI都是有好几步组成,比如java项目,我们先build打包一下,如果成功了在执行一下test,最后我们deploy到机器上。像多步操作的流程,我们可以配置yml文件,分解为多个job,来依次执行。例如下边这个.gitlab-ci.yml文件:

代码语言:javascript
复制
image: maven:3-jdk-8

stages:
  - build
  - test
  - deploy

job_build:
  stage: build
  script:
    - mvn clean install
  only:
    - develop
  tags:
    - hwy

job_test:
  stage: test
  script:
    - mvn test
  tags:
    - hwy

job_deploy:
  stage: deploy
  script:
    - echo "deploy over..."
  tags:
    - hwy

说明:这个yml文件就是有3个job组成,依次为build、test、deploy。在执行这个CI流程时候,会分解成3个job依次执行。这里tags: hwy就是指定使用哪个runner来执行这个job,我们也可以执行其他已注册可用的runner。详细gitlab pipline流程截图如下:

FAQ

  1. 注册gitlab-runner时,提示报错: GitLab Runner >= 9.0 can be used ONLY with GitLab CE/EE >= 9.0 这个因为默认gitlab runner安装时最新版的,与我们正在使用的gitlab版本不匹配,那么我们找到匹配的gitlab-runner版本安装即可,从这里我们可以找到 Runner和GitLab CE / EE兼容性列表
  2. 有时runner会连接不上,或者在项目仓库->设置->runner里呈灰色,这有可能是runner机器上没有启动gitlab-runner引起的,可以执行ps -ef | grep gitlab看看是否存在gitlab-runner的进程,如果没有则执行gitlab-runner start 命令启动runner服务。
  3. 若已经配置好了gitlab-runner了,执行commit,pipeline状态一直是pending,并且提示: This build is stuck, because the project doesn't have any runners online assigned to it. Go to Runners page 这个是因为未找到对应的runner导致的,原因一是有可能gitlab-runner注册失败,原因二有可能是.gitlab-ci.yml配置文件里面tags没有匹配到已注册可用的runner。
  4. 每次maven:3-jdk-8去执行build和test都会重新拉取镜像,下载依赖的jar包,比较耗时耗资源。这是因为docker image每次构建都是在独立的container里, maven的 .m2文件并不会被多次构建公用,这里我们可以通过修改gitlab-runner的配置,将maven .m2目录加到volumes中,并增加镜像拉取规则(默认是从远程拉取镜像,这里修改为优先获取本地镜像,不存在时才去远程拉取镜像)。 # gitlab-runner list Listing configured runners ConfigFile=/Users/wanyang3/.gitlab-runner/config.toml qd_api_runner Executor=docker Token=xxxxxx URL=http://gitlab.alibaba-inc.com/ci # vim /Users/wanyang3/.gitlab-runner/config.toml [[runners]] ... [runners.docker] ... volumes = ["/cache","/Users/wanyang3/.m2:/root/.m2"] pull_policy = "if-not-present" ... # gitlab-runner restart 修改配置完成后,记得要重启gitlab-runner。

参考资料:

  1. gitlab-runner 安装
  2. gitlab ci yaml 配置
  3. gitlab-ci-multi-runner 详情
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-05-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档