Docker搭建自己的Gitlab CI Runner
转载自:https://cloud.tencent.com/developer/article/1010595
1、Gitlab CI介绍
CI:持续集成,我们通常使用CI来做一些自动化工作,比如程序的打包,单元测试,部署等,这种构建方式避免了打包环境差异引起的错误,提高了工作效率。Gitlab-CI是Gitlab官方提供的持续集成服务,我们可以在仓库的根目录下新建.gitlab-ci.yml文件,自己定义持续集成流程模板,并且在Gitlab中配置runner,在之后的每次提交合并中将会触发构建,并且可以通过Gitlab的hook, 在代码提交的各个环节自动地完成一系列的构建工作,总之对于一些非复杂性的集成需求,都是可以满足的。
2、环境、软件准备
本次演示环境,我是在本机mac上操作,以下是我本地软件及版本:
- Git:git version 2.10.1 (Apple Git-78)
- Docker: Version 17.03.0-ce-mac1 (15583)
- Gitlab: GitLab Community Edition 8.17.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版本
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赋可执行权限
sudo chmod +x /usr/local/bin/gitlab-runner
3)注册runner
# 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
cd ~
gitlab-runner install
gitlab-runner start
方式二:docker镜像安装
1)拉取gitlab-runner镜像
sudo docker pull gitlab/gitlab-runner:latest
2)添加gitlab-runner container
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
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:
image: maven:3-jdk-8
test:
stage: test
script:
- mvn test
tags:
- hwy
我们提交该文件到gitlab对应项目上去。
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文件:
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
- 注册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兼容性列表Runner和GitLab CE / EE兼容性列表Runner和GitLab CE / EE兼容性列表 - 有时runner会连接不上,或者在项目仓库->设置->runner里呈灰色,这有可能是runner机器上没有启动gitlab-runner引起的,可以执行ps -ef | grep gitlab看看是否存在gitlab-runner的进程,如果没有则执行gitlab-runner start 命令启动runner服务。
- 若已经配置好了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。 - 每次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。
参考资料:
Docker搭建自己的Gitlab CI Runner的更多相关文章
- GitLab CI runner can't connect to tcp://localhost:2375 in kubernetes
报错的.gitlab-ci.yml配置如下 image: docker:latest services: - docker:dind variables: DOCKER_HOST: tcp://loc ...
- 在 Kubernetes 上安装 Gitlab CI Runner Gitlab CI 基本概念以及 Runner 的安装
简介 从 Gitlab 8.0 开始,Gitlab CI 就已经集成在 Gitlab 中,我们只要在项目中添加一个.gitlab-ci.yml文件,然后添加一个Runner,即可进行持续集成.在介绍 ...
- 3.在 Kubernetes 上安装 Gitlab CI Runner
结合文章:1. 在 Kubernetes 上安装 Gitlab ,地址:https://www.cnblogs.com/sanduzxcvbnm/p/13852854.html 总结: 结合开头的文章 ...
- K8s 部署 Gitlab CI Runner
K8s 版本:1.20.6 GitLab CI 最大的作用是管理各个项目的构建状态.因此,运行构建任务这种浪费资源的事情交给一个独立的 Gitlab Runner 来做就会好很多,而且 Gitlab ...
- Ubuntu Docker 安装和配置 GitLab CI 持续集成
相关文章: Ubuntu Docker 简单安装 GitLab 劈荆斩棘:Gitlab 部署 CI 持续集成 目的:在 Ubuntu 服务器上,使用 Docker 安装和配置 GitLab Runne ...
- 通过 docker 搭建自用的 gitlab 服务
前言 git 是当下如日中天的版本管理系统.现在如果不是工作在 git 版本管理系统之下,几乎都不好意思和人打招呼了.有很多现成的互联网的 git 服务提供给大家使用,例如号称程序员社交网络的 Git ...
- Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(1)
相关博文: Ubuntu 简单安装和配置 GitLab Ubuntu 简单安装 Docker Ubuntu Docker 简单安装 GitLab Ubuntu Docker 安装和配置 GitLab ...
- 使用docker搭建gitlab版本控制系统
1. GitLab 简介 GitLab 是一款基于 git 的开源代码仓库系统 GitLab 与著名的 GitHub 最大的区别就是: 允许我们搭建自己的 git 代码私有仓库,非常方便 2 ...
- 使用GitLab CI + Capistrano部署CakePHP应用程序
使用GitLab CI + Capistrano部署CakePHP应用程序 摘要:本文描述了如使用GitLab CI + Capistrano部署CakePHP应用程序. 目录 1. 问题2. 解决方 ...
随机推荐
- git.exe pull --progress -v --no-rebase "origin" master
git.exe pull --progress -v --no-rebase "origin" master remote: You do not have permission ...
- 网络营销谁在行?PHP小哥打个样
PHP -ゞ 阿白同学的学习笔记 PHP学习笔记 - 01 - web2.0 - 网络营销 @ 目录 一. 前言 二. 开始(借助菜鸟教程平台练习) 1. Hello World -- 第一个案例 2 ...
- Template -「矩阵 - 行列式」
#include <cstdio> int Abs(int x) { return x < 0 ? -x : x; } int Max(int x, int y) { return ...
- Python3.7+Tornado5.1.1+Celery3.1+Rabbitmq3.7.16实现异步队列任务
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_99 在之前的一篇文章中提到了用Django+Celery+Redis实现了异步任务队列,只不过消息中间件使用了redis,redi ...
- Java学习 (九)基础篇 包机制&JavaDoc
包机制 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间 包语句的语法为: package pkg[.pkg2[.pkg3...]]; 一般利用公司域名倒置作为包名:com.feng.x ...
- CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes!) A-E
比赛链接 A 题解 知识点:思维,模拟. 发现 \(b\) 串第一个字符是 \(1\) 则只能使用 max , \(0\) 则只能使用 min ,随后只需要模拟到 \(a\) 串剩余 \(m\) 个字 ...
- 在docker中出现的僵尸进程怎么处理
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 一.发现问题 小玲是一名数据库测试人员,这一天她尝试在docker环境中部署GreatDB集群,结果在对greatsqld ...
- NC20471 [ZJOI2007]棋盘制作
题目链接 题目 题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名. 据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对 ...
- ftp: connect: No route to host 解决方案
实验环境: centos7 x2 server-vsftp:192.168.1.32 client:192.168.95 客户端测试访问 ftp服务器 报错:ftp: connect: No rout ...
- docker compose搭建redis7.0.4高可用一主二从三哨兵集群并整合SpringBoot【图文完整版】
一.前言 redis在我们企业级开发中是很常见的,但是单个redis不能保证我们的稳定使用,所以我们要建立一个集群. redis有两种高可用的方案: High availability with Re ...