因工作需要,需要自己搭建一个gitlab,注册Gitlab-runner 再到二者结合去部署一个简单的项目,现在我将最近一些操作进行简单的总结。

准备工作

首先你要有两台centos服务器,一台来搭建gitlab,大家可以参考下Centos 7搭建Gitlab服务器超详细这篇文章搭建好gitlab,然后我们就可以开始弄gitlab-runner

常用词汇解释

   1- gitlab

      GitLab是一个利用Ruby on Rails开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。它拥有与GitHub类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

    2- gitlab-ci

   gitlab-ci 是GitLab Continuous Integration(Gitlab持续集成)的简称。从Gitlab的8.0版本开始,gitlab就全面集成了Gitlab-CI,并且对所有项目默认开启。只要在项目仓库的根目录添加.gitlab-ci.yml 文件,并且配置了Runner(运行器),那么每一次合并请求(MR)或者push都会触发CI pipeline

    3- gitlab-runner

     gitlab-runner是.gitlab-ci.yml 脚本的运行器,Gitlab-runner是基于Gitlab-CI的API进行构建的相互隔离的机器(或虚拟机)。GitLab Runner 不需要和Gitlab安装在同一台机器上,但是考虑到GitLab Runner的资源消耗问题和安全问题,也不建议这两者安装在同一台机器上。Gitlab Runner分为两种,Shared runners和Specific runners。Specific runners只能被指定的项目使用,Shared runners则可以运行所有开启Allow shared runners 选项的项目。

   4- pipelines

    Pipelines是定义于.gitlab-ci.yml中的不同阶段的不同任务。我把pipelines理解为流水线,流水线包含有多个阶段(stages),每个阶段包含有一个或多个工序(jobs),比如先购料、组装、测试、包装再上线销售,每一次push或者MR都要经过流水线之后才可以合格出厂。而.gitlab-ci.yml正是定义了这条流水线有哪些阶段,每个阶段要做什么事。

    5. Badges

    徽章,当Pipelines执行完成,会生成徽章,你可以将这些徽章加入到你的README.md文件或者你的网站

 

安装gitlab-runner

 1- 下载系统对应的Gitlab-runner(当前安装版本为11.9.2) 

sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

 2- 添加权限

  下载好后gitlab-runner默认在/usr/local/bin中

sudo chmod +x /usr/local/bin/gitlab-runner

 3- 安装并启用服务

 

sudo gitlab-runner install --user=root --working-directory=/home/gitlab-runner
 sudo gitlab-runner start

注意:这里有各参数--user是用户,如果你没有用户或者不用root可以自己创建
 sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

 到这里我们安装已经基本完成了,剩下来的就是需要将gitlab注册到gitlab-runner。

ps:GitLab-Runner就是一个用来执行.gitlab-ci.yml 脚本(存在项目中)的工具。可以理解成,Runner就像认真工作的工人,GitLab-CI就是管理工人的中心,所有工人都要在GitLab-CI里面注册,并且表明自己是为哪个项目服务。当相应的项目发生变化时,GitLab-CI就会通知相应的工人执行对应的脚本。

注册Runner

#  执行注册命令
sudo gitlab-runner register

#这里填入你的gitlab地址
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )

# 这里填入你的token
Please enter the gitlab-ci token for this runner

# 输入一个Runner的description ,可以在稍后的GitLab的UI中更改这个描述
Please enter the gitlab-ci description for this runner

# 输入Runner的tags(这个tags后面会用到)
Please enter the gitlab-ci tags for this runner (comma separated)

# 选择Runner的执行者 我选择 shell
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:

查看token

checkstyle引入gitlab gitlab ci trigger_git

到这里已经安装搭建成功了现在就是使用了

编写.gitlab-ci.yml 

# 定义 stages(阶段,会依次执行)
stages:
  - install_deps
  - build_prod
  - unit_test
  - deploy_prod


# 安装构建依赖
install_deps_job:
  stage: install_deps
  # 在哪个分支才会执行脚本
  only:
    # - dev
    # - release
    - master
  script:
    - echo '模拟安装构建依赖阶段'
  tags:
    - my-tag

# 构建预prod环境src目录下应用
build_prod_job:
  stage: build_prod
  only:
    - master
  script:
    - echo '构建预prod环境src目录下应用阶段'
  tags:
    - my-tag
      
# 单元测试
project_unit_test:
  stage: unit_test
  only:
    - master
  script:
    - echo '项目单元测试'
  tags:
    - my-tag

# 部署生产环境
deploy_prod_job:
  stage: deploy_prod
  only:
    - master
  script:
    - echo '部署生产环境阶段'
  tags:
    - my-tag

另外可以在CI/CD->pipelines->CI Lint校验.gitlab-ci.yml语法合法性

checkstyle引入gitlab gitlab ci trigger_linux_02

然后与项目一起提交,查看pipeline

checkstyle引入gitlab gitlab ci trigger_ci_03


自己碰到的问题

1- 记住.gitlab-ci.yml前面有一个点,还有后缀是yml,这个文件要在根目录下,否则你提交了也不会触发任务

2-如果你要你写的一个注册runner要自己用或者给所有项目用

checkstyle引入gitlab gitlab ci trigger_checkstyle引入gitlab_04

 3- pipelie报权限不够:Permission denied