目录

    1. 基本概念

    • GitLab-CI:GitLab 提供的持续集成系统,管理项目的构建状态,通过 GitLab Runner 来执行构建任务。
    • GitLab-Runner:用于执行构建任务,.gitlab-ci.yml 的 script 部分的运行就是由 GitLab-Runner 来完成。
    • .gitlab-ci.yml:在git项目的根目录下的一个文件,记录了一系列的阶段和执行规则。GitLab-CI 在 git push 后会解析它,根据里面的内容调用 GitLab-Runner 来执行。
    • Pipeline:一次 Pipeline 相当于一次构建任务,里面可以包含多个流程,比如安装依赖、运行测试、编译、部署测试服务器、部署生产服务器等流程。
    • Stages:构建阶段,在一次 Pipeline 中可以定义多个 Stages,所有 Stages 会按照顺序运行,如果任何一个 Stage 失败,那么后面的 Stages 不会执行。
    • Jobs:构建任务,每个 Stage 里面执行的任务。一个 Stage 可以有多个 Job ,全部 Job 会并行执行。

    2. 安装 GitLab-Runner

    以 Ubuntu 为例:

    curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.deb.sh | sudo bash
    apt-get install gitlab-ci-multi-runner
    

    3. 注册 Runner

    Runner 需要注册到 GitLab 才可以被项目使用,一个 gitlab-ci-multi-runner 服务可以注册多个 Runner。

    gitlab-ci-multi-runner register
    

    此时,需要输入一系列 Runner 的相关参数。

    Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
    > http://yourdomain.com/ci # 输入 gitlab-ci 的 URL 地址,这里配置为 GitLab 地址 的 `/ci` 路径。
    Please enter the gitlab-ci token for this runner:
    > XXXXXXXXX # 在【admin area】 页面的 【Overview】- 【Runners】中,可以找到这里需要的 token
    Please enter the gitlab-ci description for this runner:
    > shell-runner # 这里可以随便输入
    Whether to lock Runner to current project [true/false]:
    > false
    Please enter the executor: docker, parallels, shell, kubernetes, docker-ssh, ssh, virtualbox, docker+machine, docker-ssh+machine:
    > shell #如果主要通过命令,执行构建,那么选 shell
    

    查看 Runner 的状态

    gitlab-ci-multi-runner list 
    

    此时,GitLab 的项目并不能使用新建的 Runner,

    在【admin area】 页面的 【Overview】- 【Runners】 点击编辑,将新建的 Runner 授权 【enable】给项目使用。

    4. .gitlab-ci.yml

    项目的文件结构:

    在项目的一级目录下,新建 .gitlab-ci.yml文件,GitLab-CI 指定的文件名。内容如下:

    .gitlab-ci.yml

    stages:
      - build
    
    job_name:
      stage: build
      script:
        - cd my-app
        - echo "start build"
        - mvn package
    

    主要是两条命令:

    • cd 命令,进入 pom.xml 所在目录
    • mvn 命令,打包项目。

    .gitlab-ci.yml 文件保存的是构建过程,采用 YAML 格式,语法规则在文末参考链接中有,构建关键字如下:

    关键词必需描述
    imageno使用docker image
    servicesno使用docker services
    stagesno定义builds阶段
    before_scriptno定义每个job之前执行的脚本
    after_scriptno定义每个job之后执行的脚本
    variablesno定义build变量
    cacheno定义与后续job之间应缓存的文件

    5. 执行构建

    向 GitLab 提交代码之后,自动执行构建任务。

    在项目的 【Pipeline】-【Jobs】选项卡下,可以看到执行情况列表。

    在项目的 【Pipeline】-【Jobs】选项卡下,点击【Staus】栏下的颜色按钮【passed】、【failed】、【canceled】按钮,可以看到执行的 Console 输出详情。

    在详情的最后,可以看到,最终在 target 目录下生成了一个 my-app-1.0-SNAPSHOT.jar 可执行的 Java 文件。

    6. 参考