转载自:https://cloud.tencent.com/developer/article/1010595

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版本

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

  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兼容性列表Runner和GitLab CE / EE兼容性列表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 详情

Docker搭建自己的Gitlab CI Runner的更多相关文章

  1. 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 ...

  2. 在 Kubernetes 上安装 Gitlab CI Runner Gitlab CI 基本概念以及 Runner 的安装

    简介 从 Gitlab 8.0 开始,Gitlab CI 就已经集成在 Gitlab 中,我们只要在项目中添加一个.gitlab-ci.yml文件,然后添加一个Runner,即可进行持续集成.在介绍 ...

  3. 3.在 Kubernetes 上安装 Gitlab CI Runner

    结合文章:1. 在 Kubernetes 上安装 Gitlab ,地址:https://www.cnblogs.com/sanduzxcvbnm/p/13852854.html 总结: 结合开头的文章 ...

  4. K8s 部署 Gitlab CI Runner

    K8s 版本:1.20.6 GitLab CI 最大的作用是管理各个项目的构建状态.因此,运行构建任务这种浪费资源的事情交给一个独立的 Gitlab Runner 来做就会好很多,而且 Gitlab ...

  5. Ubuntu Docker 安装和配置 GitLab CI 持续集成

    相关文章: Ubuntu Docker 简单安装 GitLab 劈荆斩棘:Gitlab 部署 CI 持续集成 目的:在 Ubuntu 服务器上,使用 Docker 安装和配置 GitLab Runne ...

  6. 通过 docker 搭建自用的 gitlab 服务

    前言 git 是当下如日中天的版本管理系统.现在如果不是工作在 git 版本管理系统之下,几乎都不好意思和人打招呼了.有很多现成的互联网的 git 服务提供给大家使用,例如号称程序员社交网络的 Git ...

  7. Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(1)

    相关博文: Ubuntu 简单安装和配置 GitLab Ubuntu 简单安装 Docker Ubuntu Docker 简单安装 GitLab Ubuntu Docker 安装和配置 GitLab ...

  8. 使用docker搭建gitlab版本控制系统

    1. GitLab 简介 GitLab 是一款基于 git 的开源代码仓库系统   GitLab 与著名的 GitHub 最大的区别就是:  允许我们搭建自己的 git 代码私有仓库,非常方便   2 ...

  9. 使用GitLab CI + Capistrano部署CakePHP应用程序

    使用GitLab CI + Capistrano部署CakePHP应用程序 摘要:本文描述了如使用GitLab CI + Capistrano部署CakePHP应用程序. 目录 1. 问题2. 解决方 ...

随机推荐

  1. 方法引用_通过this引用本类的成员方法和方法引用_类的构造器(构造方法)引用和数组的构造器引用

    package com.yang.Test.ThisMethodReference; /** * 通过this引用本类的成员方法 */ public class Husband { //定义一个买房子 ...

  2. Vue 父组件传递给子组件,设置默认值为数组或者对象时

    在vue 父子组件传参过程中,传递对象或者数组时,设置默认值为{}或者[] 错误写法: props: { pos: { type: [Object, Array], default: []//这是错误 ...

  3. mysql查询版本

    系统环境下 :mysql -V; mysql内:select version();

  4. 一篇文章带你搞定BFC~

    一.什么是BFC 是 Block Formatting Contexts 的缩写,名为"块级格式化上下文". 是指浏览器中创建了一个独立的渲染区域,并且拥有一套渲染规则,他决定了其 ...

  5. Python 阿里云盾滑块验证

    本文仅供学习交流使用,如侵立删! 记一次阿里云盾滑块验证分析并通过 操作环境 win10 . mac Python3.9 selenium.pyautogui 分析 最近在做中国庭审公开网数据分析的时 ...

  6. Jenkins使用pipeline部署服务到远程服务器

    写这篇文章是对之前搭建Jenkins做的修改和完善,让jenkins更好的为我们服务 Docker搭建Jenkins服务 使用过程中遇到的问题: 为方便部署,打算将jenkins用到的jdk11.ma ...

  7. C#实现访问OPC UA服务器

    OPC UA服务器支持三种认证方式,分别是匿名认证.用户认证和证书认证.其中匿名认证安全等级最低,访问不做任何校验.用户认证访问时,OPC UA客户端需要提供用户名及密码认证,只有用户名和密码正确才允 ...

  8. 推荐几款最好用的MySQL开源客户端,建议收藏!

    一.摘要 众所周知,MYSQL 是目前使得最广泛.最流行的数据库技术之一,为了更方便的管理数据库,市场上出现了大量软件公司和个人开发者研发的客户端工具,比如我们所熟知的比较知名的客户端: Navica ...

  9. MySQL数据库授权的两种方式

    方法一:grant命令创建用户并授权(针对只修改权限) grant命令简单语法如下: grant all privileges on dbname.* to username@localhost id ...

  10. 如何快速上手AIRIOT?

    AIRIOT物联网低代码平台,快速构建稳定可靠的物联网系统,丰富的功能库及组件库,具备低成本.高效率.易操作,可扩展等特点,节省物联网项目实施时间及人力成本,支持二次开发.   [六步快速上手,玩儿转 ...