├── _config.yml ├── LICENSE ├── README.md ├── quick_start.md ├── pipelines.md ├── GitLab CI.md ├── Variables.md ├── docs ├── index.html ├── gitlab-ci.html ├── pipelines.html └── quick_start.html └── gitlab-ci-yaml.md /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-slate -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017 Fennay 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## 官方GitLab文档翻译 2 | 3 | 英文文档地址:https://docs.gitlab.com/ 4 | 5 | 已完成内容: 6 | 7 | | 修改时间 | 内容 | 说明 | 文档地址 | 8 | | ---------- | ----------------------------- | --------- | ---------------------------------------- | 9 | | 2017-12-29 | gitlab-ci-yaml | yaml配置文档 | [访问地址](https://fennay.github.io/gitlab-ci-cn/gitlab-ci-yaml.html) | 10 | | 2017-07-02 | Variables | 变量说明 | [访问地址](https://fennay.github.io/gitlab-ci-cn/variables.html) | 11 | | 2018-01-05 | Quick start guide | 快速引导页 | [访问地址](https://fennay.github.io/gitlab-ci-cn/quick_start.html) | 12 | | 2018-01-10 | GitLab Continuous Integration | GitLab CI | [访问地址](https://fennay.github.io/gitlab-ci-cn/gitlab-ci.html) | 13 | | 2018-06-23 | Pipelines and jobs | 管道 | [访问地址](https://fennay.github.io/gitlab-ci-cn/pipelines.html) | 14 | 15 | 计划内容: 16 | 17 | | 内容 | 文档地址 | 进度 | 18 | | ------------------ | ---------------------------------------- | ---- | 19 | | Using Docker images | https://docs.gitlab.com/ee/ci/docker/using_docker_images.html | 未开始 | 20 | 21 | -------------------------------------------------------------------------------- /quick_start.md: -------------------------------------------------------------------------------- 1 | # 开始GitLab CI/CD 2 | 3 | 4 | 官方原文档:https://docs.gitlab.com/ee/ci/quick_start/README.html 5 | 6 | > 注:从8.0版本开始,GitLab [持续集成](https://about.gitlab.com/gitlab-ci/)(CI)完全集成到GitLab中,且默认所有的项目开启。 7 | 8 | GitLab提供[持续集成](https://about.gitlab.com/gitlab-ci/)服务。如果添加一个[`.gitlab-ci.yml`文件](https://docs.gitlab.com/ee/ci/yaml/README.html)到项目根目录,并配置GitLab项目使用某个[Runner](https://docs.GitLab.com/ee/ci/runners/README.html),然后每一次提交或者是推送都会触发CI [pipeline](https://docs.GitLab.com/ee/ci/pipelines.html). 9 | 10 | `.gitlab-ci.yml`文件会告诉GitLab Runner 做什么。默认情况下,它运行一个`pipeline`,分为三个阶段:`build`,`test`,`deploy`。你并不需要用到所有的阶段,没有`job`的阶段会被忽略。 11 | 12 | 如果一切运行正常(没有非零的返回值),您将得到与commit关联的漂亮的绿色标记。这使得在查看代码之前,很容易就能看出是否有一个提交导致了测试失败。 13 | 14 | 大多数项目使用GitLab CI服务来运行测试套件,这样如果开发人员发现问题就会及时得到反馈。 15 | 16 | 因此,简而言之,CI所需要的步骤可以归结为: 17 | ``` 18 | 1. 添加`.gitlab-ci.yml`到项目的根目录 19 | 2. 配置一个Runner 20 | ``` 21 | 从此刻开始,在每一次push到Git仓库的过程中,Runner会自动开启pipline,pipline将显示在项目的Pipline页面中。 22 | 23 | ------ 24 | 25 | 本指南要求: 26 | 27 | - 使用版本8.0+ 的GitLab实例或者是使用[GitLab.com](https://gitlab.com/) 28 | - 一个想使用GitLab CI的项目 29 | 30 | 让我们把它分解成碎片,并致力于解决GitLab CI之谜。 31 | 32 | # 创建`.gitlab-ci.yml` 33 | 34 | 在创建`.gitlab-ci.yml`之前,我们先对它进行个简单的解释。 35 | 36 | ## `.gitlab-ci.yml`是什么 37 | 38 | `.gitlab-ci.yml`是用来配置CI在我们的项目中做些什么工作。它位于项目的根目录。 39 | 40 | 在任何的push操作,GitLab都会寻找`.gitlab-ci.yml`文件,并对此次commit开始jobs,jobs的内容来源于`.gitlab-ci.yml`文件。 41 | 42 | 因为`.gitlab-ci.yml`是存在于我们的项目仓库中,并且受版本控制的,所以旧版本也可以执行成功,且使用CI可以让forks更容易,分支可也以拥有不同的pipelines和jobs,而且对于CI来说只会拥有单一的来源。你也可以在我们的博客中找到我们为什么使用`.gitlab-ci.yml`的原因。 43 | 44 | ## 创建一个简单的`.gitlab-ci.yml` 45 | 46 | > 注意:`.gitlab-ci.yml`是一个[YAML](https://en.wikipedia.org/wiki/YAML)文件,所以必须要格外注意锁紧。使用空格,而不是tabs。 47 | 48 | 在项目的根目录创建一个名为`.gitlab-ci.yml`的文件。下面是一个Ruby on Rails项目的示例。 49 | 50 | ```yaml 51 | before_script: 52 | - apt-get update -qq && apt-get install -y -qq sqlite3 libsqlite3-dev nodejs 53 | - ruby -v 54 | - which ruby 55 | - gem install bundler --no-ri --no-rdoc 56 | - bundle install --jobs $(nproc) "${FLAGS[@]}" 57 | 58 | rspec: 59 | script: 60 | - bundle exec rspec 61 | 62 | rubocop: 63 | script: 64 | - bundle exec rubocop 65 | ``` 66 | 67 | 这是大多数Ruby应用程序最简单的配置: 68 | 69 | 1. 定义了两个jobs,`rspec`和`rubocop`(名字可以随便取),他们执行不同的命令。 70 | 2. 在每个jobs之前,`before_script`定义的命令都将会被执行。 71 | 72 | `.gitlab-ci.yml`定义了一系列的jobs,其中包含如何运行和何时运行的限制。jobs必须定义一个名称(在示例中分别是`rspec`和`rubocop`)作为顶级元素,而且总是必须包含`script`关键字。Jobs被用来创建任务,它们会被Runners接受和环境中的Runner执行。 73 | 74 | 重要的是,每个工作都是独立运行的。 75 | 76 | 如果你想检验`.gitlab-ci.yml`文件的语法是否正确,在GitLab实例页面中有一个命令行工具`/ci/lint`。也可以从项目中的**CI/CD ➔ Pipelines** and **Pipelines ➔ Jobs**找到此页面。 77 | 78 | 关于更多`.gitlab-ci.yml`的信息和语法,请阅读[.gitlab-ci.yml](https://docs.gitlab.com/ee/ci/yaml/README.html)参考文档。 79 | 80 | ## 推送`.gitlab-ci.yml`到GitLab 81 | 82 | 一旦创建了`.gitlab-ci.yml`,你应该及时添加到Git仓库并推送到GitLab。 83 | 84 | ```shell 85 | git add .gitlab-ci.yml 86 | git commit -m "Add .gitlab-ci.yml" 87 | git push origin master 88 | ``` 89 | 90 | 现在到**Pipelines**页面查看,将会看到该Pipline处于等待状态。 91 | 92 | 你也可以到**Commits**页面查看,并会发现SHA旁边的暂停按钮。 93 | 94 |  95 | 96 | 点击它即可进入到该特定commit的jobs页面。 97 | 98 |  99 | 100 | ## 配置Runner 101 | 102 | 在GitLab中,Runners将会运行你在`.gitlab-ci.yml`中定义的jobs。Runner可以是虚拟机,VPS,裸机,docker容器,甚至一堆容器。GitLab和Runners通过API通信,所以唯一的要求就是运行Runners的机器可以联网。 103 | 104 | 一个Runner可以服务GitLab中的某个特定的项目或者是多个项目。如果它服务所有的项目,则被称为共享的Runner。 105 | 106 | 在[Runners](https://docs.gitlab.com/ee/ci/runners/README.html)文档中查阅更多关于不同Runners的信息。 107 | 108 | 你可以通过**Settings->CI/CD**查找是否有Runners分配到你的项目中。创建一个Runner是简单且直接的。官方支持的Runner是用GO语言写的,它的文档在这里https://docs.gitlab.com/runner/。 109 | 110 | 为了有一个功能性的Runner,你需要遵循以下步骤: 111 | 112 | 1. [安装](https://docs.gitlab.com/runner/install/) 113 | 2. [配置](https://docs.gitlab.com/ee/ci/runners/README.html#registering-a-specific-runner) 114 | 115 | 按照上面的连接设置你自己的Runner或者使用下一节介绍的共享Runner。 116 | 117 | 一旦Runner安装好,你可以从项目的**Settings->CI/CD**找到Runner页面。 118 | 119 | ##  120 | 121 | ## 共享Runners 122 | 123 | 如果你用的是GitLab.com,你可以使用GitLab公司提供的共享Runners。 124 | 125 | 这些是运行在GitLab基础设置上面的特殊虚拟机,可以构建任何项目。 126 | 127 | 你可以通过项目中的**Settings->CI/CD**找到**Shared Runners**,并点击开启它。 128 | 129 | [阅读更多关于共享Runners](https://docs.gitlab.com/ee/ci/runners/README.html)。 130 | 131 | ## 查看pipeline和jobs的状态 132 | 133 | 成功的配置好Runner后,你应该查看最后一次提交后的状态,从*pending*、到*执行中*、*成功*或*失败*。 134 | 135 | 你可以通过项目中的Piplines页面查看所有的piplines。 136 | 137 |  138 | 139 | 也可以通过**Piplines->Jobs**页面查看所有的jobs。 140 | 141 |  142 | 143 | 通过点击jobs的状态,查看该job的日志。这对于帮助诊断job失败或者job与预期结果不同很重要。 144 | 145 |  146 | 147 | 你还可以查看在GitLab的各种页面中的任何提交状态,例如**Commits**和**Merge requests**。 148 | 149 | ## Examples 150 | 151 | 在[这里](https://docs.gitlab.com/ee/ci/examples/README.html),可以查看各种语言使用GitLab CI的示例。 -------------------------------------------------------------------------------- /pipelines.md: -------------------------------------------------------------------------------- 1 | # 管道和作业介绍 2 | 3 | 官方文档:https://docs.gitlab.com/ee/ci/pipelines.html 4 | 5 | > 在GitLab 8.8中引入的。 6 | 7 | > 注意:如果你的项目是从[GitLab中拉取的镜像仓库](https://docs.gitlab.com/ee/workflow/repository_mirroring.html#pulling-from-a-remote-repository),需要在项目中开启触动开关 8 | > 9 | > **Settings > Repository > Pull from a remote repository > Trigger pipelines for mirror updates**. 10 | 11 | ## 管道 12 | 13 | 管道是一组[分阶段](https://docs.gitlab.com/ee/ci/yaml/README.html#stages)(批处理)执行的[工作](https://docs.gitlab.com/ee/ci/pipelines.html#jobs)。同一个阶段中的所有工作都是并行执行的(如果有足够的并发[Runners](https://docs.gitlab.com/ee/ci/runners/README.html)),如果它们全部成功,管道就进入下一个阶段。如果其中一个jobs失败,则下一个阶段不(通常)执行。您可以访问项目的**Pipeline**选项卡中的管道页面。 14 | 15 | 在下图中,您可以看到管道由4个阶段组成(`build(构建)`, `test(测试)`, `staging(分级)`, `production(生产)`),每个阶段都有一个或多个工作。 16 | 17 | > 注意:在GitLab [pipeline图](https://docs.gitlab.com/ee/ci/pipelines.html#pipeline-graphs)上显示时,应当大写显示stats的名称。 18 | 19 |  20 | 21 | ### 管道类型 22 | 23 | 管道分三种,但是通常都使用单一的“管道”来代替所有。人们经常谈论他们,就好像每个都是“管道”一样,但实际上,他们只是综合管道的一部分。 24 | 25 |  26 | 27 | 1. **CI Pipeline:** 在`gitlab-ci.yml`中定义的构建和测试阶段。 28 | 29 | 2. **Deploy Pipeline:** 在`.gitlab-ci.yml`中定义的部署阶段,用来通过各种各样的方式将代码部署到服务器: 30 | 31 | 例如,将代码发布到生成环境 32 | 33 | 3. **Project Pipeline**:[通过API触发](https://docs.gitlab.com/ee/ci/triggers/README.html#ci-job-token)跨项目CI依赖关系,尤其是针对微服务,但也适用于复杂的构建依赖关系: 34 | 35 | 例如,api-> front-end,ce / ee-> omnibus。 36 | 37 | ## 开发工作流程 38 | 39 | 管道适应多种开发工作流程: 40 | 41 | 1. **Branch Flow**(例如,dev,qa,分期,生产等不同分支) 42 | 2. **Trunk-based Flow** (例如,功能分支、单一的主分支和可能带有标签的发布) 43 | 3. **基于分叉的流程**(例如,来自fork的合并请求) 44 | 45 | 连续交付流程示例: 46 | 47 |  48 | 49 | ### 工作 50 | 51 | 工作可以在[`.gitlab-ci.yml`](https://docs.gitlab.com/ee/ci/yaml/README.html#jobs)文件中定义。不要与`build`工作或`build` 阶段混淆。 52 | 53 | ## 定义管道 54 | 55 | 在`.gitlab-ci.yml`中通过指定[阶段](https://docs.gitlab.com/ee/ci/yaml/README.html#stages)运行的[作业](https://docs.gitlab.com/ee/ci/pipelines.html#jobs)来定义管道。 56 | 57 | 有关[作业](https://docs.gitlab.com/ee/ci/yaml/README.html#jobs),请参阅参考[文档](https://docs.gitlab.com/ee/ci/yaml/README.html#jobs)。 58 | 59 | ## 查看管道状态 60 | 61 | 您可以在项目的 **Pipeline**选项卡下找到当前和历史运行的管道 。点击管道将显示为该管道运行的作业。 62 | 63 |  64 | 65 | ## 查看工作状态 66 | 67 | 当您访问单个管道时,您可以看到该管道的相关作业。点击单个作业会显示该作业运行历史,并允许您取消作业,重试作业或清除作业运行日志。 68 | 69 | [](https://docs.gitlab.com/ee/ci/img/pipelines.png) 70 | 71 | ## 查看工作失败的原因 72 | 73 | > 在GitLab 10.7中[引入](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/17782)。 74 | 75 | 当管道发生故障或允许失败时,有几个地方可以快速检查失败的原因: 76 | 77 | - **在管道图中** 出现在管道图中。 78 | - **在管道小部件中** 出现在合并请求和提交页面中。 79 | - **在工作视图中 **出现在全局和详细的工作视图中。 80 | 81 | 无论任何方式中,你将鼠标悬停在失败的作业上,你可以看到失败的原因。 82 | 83 | [](https://docs.gitlab.com/ee/ci/img/job_failure_reason.png) 84 | 85 | 从[GitLab 10.8中](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/17814),您还可以在工作详情页面上看到失败的原因。 86 | 87 | ## 管道图 88 | 89 | > 在GitLab 8.11中[引入](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/5742)。 90 | 91 | 管道可以是复杂的结构,具有许多顺序和平行的作业。为了让您更容易看到发生了什么,它可以查看单个管道及其状态。 92 | 93 | 管道图可以通过两种不同的方式显示,具体取决于您所处的页面。 94 | 95 | ------ 96 | 97 | 当您在[单个管道页面](https://docs.gitlab.com/ee/ci/pipelines.html#seeing-pipeline-status)上时,可以找到显示每个阶段作业名称的常规管道图。 98 | 99 | [](https://docs.gitlab.com/ee/ci/img/pipelines.png) 100 | 101 | 其次,有管道迷你图,占用更少的空间,并且可以快速浏览所有作业是成果还是失败。管道迷你图可以在您访问以下页面时找到: 102 | 103 | - 管道索引页面 104 | - 提交页面 105 | - 合并请求页面 106 | 107 | 通过这种方式,您可以看到所有相关的作业以及每个阶段的最终结果。这使您可以快速查看失败的工作并修复它。管道迷你图的阶段是可折叠的。将鼠标悬停在它们上面,然后单击以展开其他作业。 108 | 109 | | **迷你图** | **迷你图展开** | 110 | | ------------------------------------------------------------ | ------------------------------------------------------------ | 111 | | [](https://docs.gitlab.com/ee/ci/img/pipelines_mini_graph_simple.png) | [](https://docs.gitlab.com/ee/ci/img/pipelines_mini_graph.png) | 112 | 113 | ### 将相似的工作分组 114 | 115 | > 在GitLab 8.12中[引入](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/6242)。 116 | 117 | 如果你有许多类似的工作,你的管道图会变得很长,很难阅读。出于这个原因,类似的工作可以自动组合在一起。如果作业名称以某种格式命名,则它们将在常规管线图(非迷你图)中折叠为一个组。如果您没有看到重试或取消按钮,您就知道管道将作业已经合并分组了。将鼠标悬停在上面会显示分组作业的数量。可以点击展开它们。 118 | 119 | [](https://docs.gitlab.com/ee/ci/img/pipelines_grouped.png) 120 | 121 | 基本要求是需使用以下方式的一种将两个数字分隔开(可以互换使用)(查看下面的示例): 122 | 123 | - 空间 124 | - 斜线(`/`) 125 | - 冒号(`:`) 126 | 127 | > **注意:** 更准确地说,[它使用](https://gitlab.com/gitlab-org/gitlab-ce/blob/2f3dc314f42dbd79813e6251792853bc231e69dd/app/models/commit_status.rb#L99)这个正则表达式:`\d+[\s:\/\\]+\d+\s*`。 128 | 129 | 这些工作将通过从左到右比较这两个数字来进行排序。通常第一个是索引,第二个是总数。 130 | 131 | 例如,以下作业将被分组在一个名为的作业下`test`: 132 | 133 | - `test 0 3` => `test` 134 | - `test 1 3` => `test` 135 | - `test 2 3` => `test` 136 | 137 | 以下作业将被分组在下列作业中`test ruby`: 138 | 139 | - `test 1:2 ruby` => `test ruby` 140 | - `test 2:2 ruby` => `test ruby` 141 | 142 | 下列作业也将被归类在一个作业中`test ruby`: 143 | 144 | - `1/3 test ruby` => `test ruby` 145 | - `2/3 test ruby` => `test ruby` 146 | - `3/3 test ruby` => `test ruby` 147 | 148 | ### 手动操作 149 | 150 | > 在GitLab 8.15中[引入](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/7931)。 151 | 152 | [手动操作](https://docs.gitlab.com/ee/ci/yaml/README.html#manual)允许您在使用CI中的指定作业之前需要手动操作。整个管道可以自动运行,但实际[部署到生产](https://docs.gitlab.com/ee/ci/environments.html#manually-deploying-to-environments)需要点击。 153 | 154 | 您可以直接从管道图中做到这一点。只需点击播放按钮即可执行指定作业。例如,在下面的图片中,`production` 舞台上有一项手动操作。 155 | 156 | [](https://docs.gitlab.com/ee/ci/img/pipelines.png) 157 | 158 | ### 作业排序 159 | 160 | **常规管道图** 161 | 162 | 在单个管道页面中,作业按名称排序。 163 | 164 | **迷你管道图** 165 | 166 | > 在GitLab 9.0中[引入](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/9760)。 167 | 168 | 在管道迷你图中,作业首先按重要性排序,然后按名称排序。重要性的顺序是: 169 | 170 | - 失败 171 | - 警告 172 | - 有待 173 | - 赛跑 174 | - 手册 175 | - 取消 176 | - 成功 177 | - 跳过 178 | - 创建 179 | 180 | [](https://docs.gitlab.com/ee/ci/img/pipelines_mini_graph_sorting.png) 181 | 182 | ### 多项目管道图 183 | 184 | > 可在GitLab Premium 、GitLab Sliver或更高级版本中使用。 185 | 186 | [多项目管道](https://docs.gitlab.com/ee/ci/multi_project_pipelines.html),您可以访问跨项目管道。 187 | 188 | ## 如何计算管道持续时间 189 | 190 | 管道的总运行时间将排除重试和待处理(排队)时间。我们可以将这个问题缩减为寻找周期的联合。 191 | 192 | 所以每个工作都会被表示为 `Period`,其中包括 `Period#first`工作开始`Period#last`时和工作完成时。一个简单的例子是: 193 | 194 | - A(1,3) 195 | - B(2,4) 196 | - C(6,7) 197 | 198 | 这里A从1开始,到3结束。B从2开始,并到4结束。C从6开始,到7结束。视觉上它可以被看作: 199 | 200 | ``` 201 | 0 1 2 3 4 5 6 7 202 | AAAAAAA 203 | BBBBBBB 204 | CCCC 205 | ``` 206 | 207 | A,B和C的联合将是(1,4)和(6,7),因此总运行时间应该是: 208 | 209 | ``` 210 | (4 - 1) + (7 - 6) => 4 211 | ``` 212 | 213 | ## 徽章 214 | 215 | 管道状态和测试范围内报告徽章可用。您可以在[管道设置](https://docs.gitlab.com/ee/user/project/pipelines/settings.html)页面找到它们各自的链接。 216 | 217 | ## 受保护分行的安全 218 | 219 | 管道在[受保护的分支](https://docs.gitlab.com/ee/user/project/protected_branches.html)上执行时,将执行严格的安全模型 。 220 | 221 | 只有在[允许](https://docs.gitlab.com/ee/user/project/protected_branches.html#using-the-allowed-to-merge-and-allowed-to-push-settings)用户[合并或推送](https://docs.gitlab.com/ee/user/project/protected_branches.html#using-the-allowed-to-merge-and-allowed-to-push-settings) 特定分支时,才允许在受保护的分支上执行以下操作 : 222 | 223 | - 运行**手动管道**(使用Web UI或Pipelines API) 224 | - 运行**预定的管道** 225 | - 使用**触发器**运行管道 226 | - 在现有管线上触发**手动操作** 227 | - **重试/取消**现有作业(使用Web UI或Pipelines API) 228 | 229 | 标记为**受保护的变量**仅适用于在受保护分支上运行的作业,从而避免不受信任的用户无意中访问敏感信息,如部署凭证和令牌。 230 | 231 | 标记为**受保护的Runners**只能保护分支机构运行的作业,避免不受信任的代码要在保护runner和保存部署键被意外地触发或其他凭证执行。为了确保打算在受保护的跑步者上执行的工作不会使用常规runner,必须对其进行相应标记。 232 | 233 | [帮助改进此翻译](https://github.com/Fennay/gitlab-ci-cn/blob/master/pipelines.md) 234 | 235 | -------------------------------------------------------------------------------- /GitLab CI.md: -------------------------------------------------------------------------------- 1 | # GitLab 持续集成 (GitLab CI) 2 | 3 |  4 | 5 | 当自动化在你的工作中扮演一个不可或缺的角色时,持续集成带来的收益是巨大的。GitLab具有内置的持续集成、持续部署和持续交付来构建、测试和部署应用程序。 6 | 7 | 这里有一些我们收集到的信息带你开始持续集成。 8 | 9 | ## 开始 10 | 11 | 向你的GitLab CI旅程迈出的第一步。 12 | 13 | - [开始使用GitLab CI](https://fennay.github.io/gitlab-ci-cn/quick_start.html) 14 | - [Pipelines and jobs](https://docs.gitlab.com/ee/ci/pipelines.html) 15 | - [配置Runner,让它运行你的程序](https://docs.gitlab.com/ee/ci/runners/README.html) 16 | - 参考文章 17 | - [Getting started with GitLab and GitLab CI - Intro to CI](https://about.gitlab.com/2015/12/14/getting-started-with-gitlab-and-gitlab-ci/) 18 | - [Continuous Integration, Delivery, and Deployment with GitLab - Intro to CI/CD](https://about.gitlab.com/2016/08/05/continuous-integration-delivery-and-deployment-with-gitlab/) 19 | - [GitLab CI: Run jobs sequentially, in parallel, or build a custom pipeline](https://about.gitlab.com/2016/07/29/the-basics-of-gitlab-ci/) 20 | - [Setting up GitLab Runner For Continuous Integration](https://about.gitlab.com/2016/03/01/gitlab-runner-with-docker/) 21 | - [GitLab CI: Deployment & environments](https://about.gitlab.com/2016/08/26/ci-deployment-and-environments/) 22 | - 视频: 23 | - [Demo (Streamed live on Jul 17, 2017): GitLab CI/CD Deep Dive](https://youtu.be/pBe4t1CD8Fc?t=195) 24 | - [Demo (March, 2017): how to get started using CI/CD with GitLab](https://about.gitlab.com/2017/03/13/ci-cd-demo/) 25 | - [Webcast (April, 2016): getting started with CI in GitLab](https://about.gitlab.com/2016/04/20/webcast-recording-and-slides-introduction-to-ci-in-gitlab/) 26 | - 第三方视频 27 | - [Intégration continue avec GitLab (September, 2016)](https://www.youtube.com/watch?v=URcMBXjIr24&t=13s) 28 | - [GitLab CI for Minecraft Plugins (July, 2016)](https://www.youtube.com/watch?v=Z4pcI9F8yf8) 29 | 30 | ## 参考指南 31 | 32 | 一旦你熟悉了入门指南,你就可以去查阅特定的参考指南。 33 | 34 | - [`.gitlab-ci.yml`指南](https://fennay.github.io/gitlab-ci-cn/quick_start.html) - 了解关于`.gitlab-ci.yml`的所有细节和参数设置。 35 | - CI Variables - 了解如何在你的`.gitlab-ci.yml`中使用变量或者保证项目中变量的安全。 36 | - 权限模型 - 了解用户执行某些CI操作的访问级别 37 | - [用户权限](https://docs.gitlab.com/ee/user/permissions.html#gitlab-ci) 38 | - [Job权限](https://docs.gitlab.com/ee/user/permissions.html#job-permissions) 39 | 40 | ## Auto DevOps 41 | 42 | - [Auto DevOps](https://docs.gitlab.com/ee/topics/autodevops/index.html) 43 | 44 | ## GitLab CI + Docker 45 | 46 | 利用Docker的能力来运行CI pipelines。 47 | 48 | - 使用docker 镜像执行 GitLab Runner。 49 | - 使用CI构建 docker 镜像 50 | - CI 服务(链接docker容器) 51 | - 文章 52 | - [Setting up GitLab Runner For Continuous Integration](https://about.gitlab.com/2016/03/01/gitlab-runner-with-docker/) 53 | 54 | ## 高级使用 55 | 56 | 一旦你熟悉了GitLab CI的基础知识,就该开始学习如何利用它的潜能了。 57 | 58 | - [Environments and deployments](https://docs.gitlab.com/ee/ci/environments.html) - 将你的工作分成不同的环境,并将它们用于不同的目的,如测试、构建和部署。 59 | - [Job artifacts](https://docs.gitlab.com/ee/user/project/pipelines/job_artifacts.html) 60 | - [Git submodules](https://docs.gitlab.com/ee/ci/git_submodules.html) - 在涉及Git子模块时如何运行CI jobs 61 | - [Auto deploy](https://docs.gitlab.com/ee/ci/autodeploy/index.html) 62 | - [Use SSH keys in your build environment](https://docs.gitlab.com/ee/ci/ssh_keys/README.html) and status of each CI environment running on Kubernetes 63 | - [Trigger pipelines through the GitLab API](https://docs.gitlab.com/ee/ci/triggers/README.html) 64 | - [Trigger pipelines on a schedule](https://docs.gitlab.com/ee/user/project/pipelines/schedules.html) 65 | - [Deploy Boards](https://docs.gitlab.com/ee/user/project/deploy_boards.html) - 检查当前状况 66 | - [Kubernetes clusters](https://docs.gitlab.com/ee/user/project/clusters/index.html) - 将一个或多个Kubernetes集群集成到项目中。 67 | 68 | ## Review Apps 69 | 70 | - [Review Apps](https://docs.gitlab.com/ee/ci/review_apps/index.html) 71 | - 参考文章: 72 | - [Introducing Review Apps](https://about.gitlab.com/2016/11/22/introducing-review-apps/) 73 | - [Example project that shows how to use Review Apps](https://gitlab.com/gitlab-examples/review-apps-nginx/) 74 | 75 | ## GitLab CI for GitLab Pages 76 | 77 | See the topic on [GitLab Pages](https://docs.gitlab.com/ee/user/project/pages/index.html). 78 | 79 | ## 特殊配置 80 | 81 | 你可以在你的整个GitLab实例以及每个项目中更改GitLab CI的默认行为。 82 | 83 | - Project specific 84 | - [Pipelines settings](https://docs.gitlab.com/ee/user/project/pipelines/settings.html) 85 | - [Learn how to enable or disable GitLab CI](https://docs.gitlab.com/ee/ci/enable_or_disable_ci.html) 86 | - Affecting the whole GitLab instance 87 | - [Continuous Integration admin settings](https://docs.gitlab.com/ee/user/admin_area/settings/continuous_integration.html) 88 | 89 | ## 示例 90 | 91 | > 注意:[GitLab CI Yml 项目](https://gitlab.com/gitlab-org/gitlab-ci-yml)是官方维护的`.gitlab-ci.yml`文件集合。如果你最爱的编程语言或框架没有`.gitlab-ci.yml`文件,我们非常欢迎你通过提交merge request来帮忙。 92 | 93 | 这里有一些关于设置CI pipline的教程和指南。 94 | 95 | - [GitLab CI示例](https://docs.gitlab.com/ee/ci/examples/README.html): 96 | - [PHP](https://docs.gitlab.com/ee/ci/examples/php.html) 97 | - [Ruby](https://docs.gitlab.com/ee/ci/examples/test-and-deploy-ruby-application-to-heroku.html) 98 | - [Python](https://docs.gitlab.com/ee/ci/examples/test-and-deploy-python-application-to-heroku.html) 99 | - [Clojure](https://docs.gitlab.com/ee/ci/examples/test-clojure-application.html) 100 | - [Scala](https://docs.gitlab.com/ee/ci/examples/test-scala-application.html) 101 | - [Phoenix](https://docs.gitlab.com/ee/ci/examples/test-phoenix-application.html) 102 | - [Run PHP Composer & NPM scripts then deploy them to a staging server](https://docs.gitlab.com/ee/ci/examples/deployment/composer-npm-deploy.html) 103 | - [Analyze code quality with the Code Climate CLI](https://docs.gitlab.com/ee/ci/examples/code_climate.html) 104 | - 参考文章: 105 | - [How to test and deploy Laravel/PHP applications with GitLab CI/CD and Envoy](https://docs.gitlab.com/ee/articles/laravel_with_gitlab_and_envoy/index.html) 106 | - [How to deploy Maven projects to Artifactory with GitLab CI/CD](https://docs.gitlab.com/ee/ci/examples/artifactory_and_gitlab/index.html) 107 | - [Automated Debian packaging](https://about.gitlab.com/2016/10/12/automated-debian-package-build-with-gitlab-ci/) 108 | - [Spring boot application with GitLab CI and Kubernetes](https://about.gitlab.com/2016/12/14/continuous-delivery-of-a-spring-boot-application-with-gitlab-ci-and-kubernetes/) 109 | - [Setting up GitLab CI for iOS projects](https://about.gitlab.com/2016/03/10/setting-up-gitlab-ci-for-ios-projects/) 110 | - [Setting up GitLab CI for Android projects](https://about.gitlab.com/2016/11/30/setting-up-gitlab-ci-for-android-projects/) 111 | - [Building a new GitLab Docs site with Nanoc, GitLab CI, and GitLab Pages](https://about.gitlab.com/2016/12/07/building-a-new-gitlab-docs-site-with-nanoc-gitlab-ci-and-gitlab-pages/) 112 | - [CI/CD with GitLab in action](https://about.gitlab.com/2017/03/13/ci-cd-demo/) 113 | - [Building an Elixir Release into a Docker image using GitLab CI](https://about.gitlab.com/2016/08/11/building-an-elixir-release-into-docker-image-using-gitlab-ci-part-1/) 114 | - 杂项 115 | - [Using `dpl` as deployment tool](https://docs.gitlab.com/ee/ci/examples/deployment/README.html) 116 | - [Repositories with examples for various languages](https://gitlab.com/groups/gitlab-examples) 117 | - [The .gitlab-ci.yml file for GitLab itself](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/.gitlab-ci.yml) 118 | - [Example project that shows how to use Review Apps](https://gitlab.com/gitlab-examples/review-apps-nginx/) 119 | 120 | ## 集成 121 | 122 | - 参考文章: 123 | - [Continuous Delivery with GitLab and Convox](https://about.gitlab.com/2016/06/09/continuous-delivery-with-gitlab-and-convox/) 124 | - [Getting Started with GitLab and Shippable Continuous Integration](https://about.gitlab.com/2016/05/05/getting-started-gitlab-and-shippable/) 125 | - [GitLab Partners with DigitalOcean to make Continuous Integration faster, safer, and more affordable](https://about.gitlab.com/2016/04/19/gitlab-partners-with-digitalocean-to-make-continuous-integration-faster-safer-and-more-affordable/) 126 | 127 | ## 为什么选择GitLab CI? 128 | 129 | - 参考文章: 130 | - [Why We Chose GitLab CI for our CI/CD Solution](https://about.gitlab.com/2016/10/17/gitlab-ci-oohlala/) 131 | - [Building our web-app on GitLab CI: 5 reasons why Captain Train migrated from Jenkins to GitLab CI](https://about.gitlab.com/2016/07/22/building-our-web-app-on-gitlab-ci/) 132 | 133 | ## 正在发生的变化 134 | 135 | - [为GitLab 9.0重命名CI变量](https://docs.gitlab.com/ee/ci/variables/README.html#9-0-renaming) 阅读一些已经不推荐的CI变量,以及如何使用GitLab 9.0+。 136 | - [新的CI工作权限模型](https://docs.gitlab.com/ee/user/project/new_ci_build_permissions_model.html) 查看在GitLab 8.12中发生了什么变化,以及这会如何影响工作。有一种新的方法可以访问工作中的Git子模块和LFS对象。 137 | 138 | 139 | 140 | [编辑此页面](https://gitlab.com/gitlab-org/gitlab-ee/blob/master/doc/ci/README.md) -------------------------------------------------------------------------------- /Variables.md: -------------------------------------------------------------------------------- 1 | # Variables 2 | 3 | 官方文档:https://docs.gitlab.com/ce/ci/variables/README.html 4 | 5 | 当GitLab CI 中接受到一个job后,[Runner](https://docs.gitlab.com/runner/)就开始准备构建环境。开始设置预定义的变量(环境变量)和用户自定义的变量。 6 | 7 | ## variables 的执行顺序 8 | 9 | 变量可以被重写,并且是按照下面的顺序进行执行: 10 | 11 | 1. [Trigger variables](https://docs.gitlab.com/ce/ci/triggers/README.html#pass-job-variables-to-a-trigger)(优先级最高) 12 | 2. [Secret variables](https://docs.gitlab.com/ce/ci/variables/README.html#secret-variables) 13 | 3. YAML-defined [job-level variables](https://docs.gitlab.com/ce/ci/yaml/README.html#job-variables) 14 | 4. YAML-defined [global variables](https://docs.gitlab.com/ce/ci/yaml/README.html#variables) 15 | 5. [Deployment variables](https://docs.gitlab.com/ce/ci/variables/README.html#deployment-variables) 16 | 6. [Predefined variables](https://docs.gitlab.com/ce/ci/variables/README.html#predefined-variables-environment-variables) (优先级最低) 17 | 18 | 举个例子,如果你定义了私有变量`API_TOKEN=secure`,并且在`.gitlab-ci.yml`中定义了 ` API_TOKEN=yaml`,那么私有变量`API_TOKEN`的值将是`secure`,因为secret variables的优先级较高。 19 | 20 | ## Predefined variables(Environment variables) 21 | 22 | 有部分预定义的环境变量仅仅只能在最小版本的[GitLab Runner](https://docs.gitlab.com/runner/)中使用。请参考下表查看对应的Runner版本要求。 23 | 24 | > **注意**:从GitLab 9.0 开始,部分变量已经不提倡使用。请查看[9.0 Renaming](https://docs.gitlab.com/ce/ci/variables/README.html#9-0-renaming)部分来查找他们的替代变量。强烈建议使用新的变量,我们也会在将来的GitLab版本中将他们移除。 25 | 26 | | Variable | GitLab | Runner | Description | 27 | | :----------------------------- | ------ | ------ | ---------------------------------------- | 28 | | **CI** | all | 0.4 | 标识该job是在CI环境中执行 | 29 | | **CI_COMMIT_REF_NAME** | 9.0 | all | 用于构建项目的分支或tag名称 | 30 | | **CI_COMMIT_REF_SLUG** | 9.0 | all | 先将`$CI_COMMIT_REF_NAME`的值转换成小写,最大不能超过63个字节,然后把除了`0-9`和`a-z`的其他字符转换成`-`。在URLs和域名名称中使用。 | 31 | | **CI_COMMIT_SHA** | 9.0 | all | commit的版本号 | 32 | | **CI_COMMIT_TAG** | 9.0 | 0.5 | commit的tag名称。只有创建了tags才会出现。 | 33 | | **CI_DEBUG_TRACE** | 9.0 | 1.7 | [debug tracing](https://docs.gitlab.com/ce/ci/variables/README.html#debug-tracing)开启时才生效 | 34 | | **CI_ENVIRONMENT_NAME** | 8.15 | all | job的环境名称 | 35 | | **CI_ENVIRONMENT_SLUG** | 8.15 | all | 环境名称的简化版本,适用于DNS,URLs,Kubernetes labels等 | 36 | | **CI_JOB_ID** | 9.0 | all | GItLab CI内部调用job的一个唯一ID | 37 | | **CI_JOB_MANUAL** | 8.12 | all | 表示job启用的标识 | 38 | | **CI_JOB_NAME** | 9.0 | 0.5 | `.gitlab-ci.yml`中定义的job的名称 | 39 | | **CI_JOB_STAGE** | 9.0 | 0.5 | `.gitlab-ci.yml`中定义的stage的名称 | 40 | | **CI_JOB_TOKEN** | 9.0 | 1.2 | 用于同GitLab容器仓库验证的token | 41 | | **CI_REPOSITORY_URL** | 9.0 | all | git仓库地址,用于克隆 | 42 | | **CI_RUNNER_DESCRIPTION** | 8.10 | 0.5 | GitLab中存储的Runner描述 | 43 | | **CI_RUNNER_ID** | 8.10 | 0.5 | Runner所使用的唯一ID | 44 | | **CI_RUNNER_TAGS** | 8.10 | 0.5 | Runner定义的tags | 45 | | **CI_PIPELINE_ID** | 8.10 | 0.5 | GitLab CI 在内部使用的当前pipeline的唯一ID | 46 | | **CI_PIPELINE_TRIGGERED** | all | all | 用于指示该job被触发的标识 | 47 | | **CI_PROJECT_DIR** | all | all | 仓库克隆的完整地址和job允许的完整地址 | 48 | | **CI_PROJECT_ID** | all | all | GitLab CI在内部使用的当前项目的唯一ID | 49 | | **CI_PROJECT_NAME** | 8.10 | 0.5 | 当前正在构建的项目名称(事实上是项目文件夹名称) | 50 | | **CI_PROJECT_NAMESPACE** | 8.10 | 0.5 | 当前正在构建的项目命名空间(用户名或者是组名称) | 51 | | **CI_PROJECT_PATH** | 8.10 | 0.5 | 命名空间加项目名称 | 52 | | **CI_PROJECT_PATH_SLUG** | 9.3 | all | `$CI_PROJECT_PATH`小写字母、除了`0-9`和`a-z`的其他字母都替换成`-`。用于地址和域名名称。 | 53 | | **CI_PROJECT_URL** | 8.10 | 0.5 | 项目的访问地址(http形式) | 54 | | **CI_REGISTRY** | 8.10 | 0.5 | 如果启用了Container Registry,则返回GitLab的Container Registry的地址 | 55 | | **CI_REGISTRY_IMAGE** | 8.10 | 0.5 | 如果为项目启用了Container Registry,它将返回与特定项目相关联的注册表的地址 | 56 | | **CI_REGISTRY_PASSWORD** | 9.0 | all | 用于push containers到GitLab的Container Registry的密码 | 57 | | **CI_REGISTRY_USER** | 9.0 | all | 用于push containers到GItLab的Container Registry的用户名 | 58 | | **CI_SERVER** | all | all | 标记该job是在CI环境中执行 | 59 | | **CI_SERVER_NAME** | all | all | 用于协调job的CI服务器名称 | 60 | | **CI_SERVER_REVISION** | all | all | 用于调度job的GitLab修订版 | 61 | | **CI_SERVER_VERSION** | all | all | 用于调度job的GItLab版本 | 62 | | **ARTIFACT_DOWNLOAD_ATTEMPTS** | 8.15 | 1.9 | 尝试运行下载artifacts的job的次数 | 63 | | **GET_SOURCES_ATTEMPTS** | 8.15 | 1.9 | 尝试运行获取源的job次数 | 64 | | **GITLAB_CI** | all | all | 用于指示该job是在GItLab CI环境中运行 | 65 | | **GITLAB_USER_ID** | 8.12 | all | 开启该job的用户ID | 66 | | **GITLAB_USER_EMAIL** | 8.12 | all | 开启该job的用户邮箱 | 67 | | **RESTORE_CACHE_ATTEMPTS** | 8.15 | 1.9 | 尝试运行存储缓存的job的次数 | 68 | 69 | ## 9.0 Renaming 70 | 71 | 根据GitLab的命名规则,在9.0以后将从`build`术语转到`job`CI变量中,并且已经被重命名。 72 | 73 | | 8.x name | 9.0+ name | 74 | | -------------------- | ----------------------- | 75 | | `CI_BUILD_ID` | `CI_JOB_ID` | 76 | | `CI_BUILD_REF` | `CI_COMMIT_SHA` | 77 | | `CI_BUILD_TAG` | `CI_COMMIT_TAG` | 78 | | `CI_BUILD_REF_NAME` | `CI_COMMIT_REF_NAME` | 79 | | `CI_BUILD_REF_SLUG` | `CI_COMMIT_REF_SLUG` | 80 | | `CI_BUILD_NAME` | `CI_JOB_NAME` | 81 | | `CI_BUILD_STAGE` | `CI_JOB_STAGE` | 82 | | `CI_BUILD_REPO` | `CI_REPOSITORY_URL` | 83 | | `CI_BUILD_TRIGGERED` | `CI_PIPELINE_TRIGGERED` | 84 | | `CI_BUILD_MANUAL` | `CI_JOB_MANUAL` | 85 | | `CI_BUILD_TOKEN` | `CI_JOB_TOKEN` | 86 | 87 | ## `.gitlab-ci.yaml` defined variables 88 | 89 | > 注意:此功能要求GitLab Runner 0.5或者更高版本,并且GitLab CI 7.14或者更高版本 90 | 91 | GitLab CI允许你向`.gitlab-ci.yml`中添加变量,这个变量在构建环境中设置。因此,变量将保存在存储中,他们用于存储非敏感的项目配置,例如:`RAILS_ENV`或者`DATABASE_URL`。 92 | 93 | 举个例子,如果将变量设置为全局以下(不是在一个作业中),则它将用于所有执行的命令脚本中: 94 | 95 | ```yaml 96 | variables: 97 | DATABASE_URL: "postgres://postgres@postgres/my_database" 98 | ``` 99 | 100 | YAML中定义的变量也将应用到所有创建的服务容器中,因此可以对它进行微调。 101 | 102 | 变量可以定义为全局,同时也可以定义为job级别。若要关闭作业中的全局定义变量,请定义一个空hash: 103 | 104 | ```yaml 105 | job_name: 106 | variables: {} 107 | ``` 108 | 109 | 您可以在变量定义中使用其他变量(或使用$$将其转义): 110 | 111 | ```yaml 112 | variables: 113 | LS_CMD: 'ls $FLAGS $$TMP_DIR' 114 | FLAGS: '-al' 115 | script: 116 | - 'eval $LS_CMD' # will execute 'ls -al $TMP_DIR' 117 | ``` 118 | 119 | ## Secret variables 120 | 121 | > 注意: 122 | > 123 | > - 这个功能需要GitLab Runner 0.4.0或者更高版本。 124 | > - 请注意,私有变量不会隐藏,如果明确要这么做,他们的值可以显示在job日志中。如果您的项目是公共的或内部的,你可以在项目的pipeline中设置pipeline为私有的。关于私有变量的讨论在issue [#13784](https://gitlab.com/gitlab-org/gitlab-ce/issues/13784)。 125 | 126 | GitLab CI允许你在构建环境过程中设置项目的私有变量。私有变量存储在仓库(.gitlab-ci.yml)中,并被安全的传递给GitLab Runner,使其在构建环境中可用。建议使用该方法存储诸如密码、秘钥和凭据之类的东西。 127 | 128 | 可用通过**Settings ➔ Pipelines**来增加私有变量,通过**Settings ➔ Pipelines**找到的模块称之为私有变量。 129 | 130 | 一次设置,所有的后续pipeline是都可以使用它们。 131 | 132 | ## Protected secret variables 133 | 134 | > 注意:此功能要求GitLab 9.3或者更高。 135 | 136 | 私有变量可以被保护。每当一个私有变量被保护时,它只会安全的传递到在[受保护的分支](https://docs.gitlab.com/ce/user/project/protected_branches.html)或[受保护的标签](https://docs.gitlab.com/ce/user/project/protected_tags.html)上运行的pipeline。其他的pipeline将不会得到受保护的变量。 137 | 138 | 可用通过**Settings ➔ Pipelines**来增加私有变量,通过**Settings ➔ Pipelines**找到的模块称之为私有变量,然后点击*Protected*。 139 | 140 | 一次设置,所有的后续pipeline是都可以使用它们。 141 | 142 | ## Deploment variables 143 | 144 | > 注意:此功能要求GitLab CI 8.15或者更高版本。 145 | 146 | 负责部署配置的[项目服务](https://docs.gitlab.com/ce/user/project/integrations/project_services.html)可以定义在构建环境中设置自己的变量。这些变量只定义用于[部署job](https://docs.gitlab.com/ce/ci/environments.html)。请参考您正在使用的项目服务的文档,以了解他们定义的变量。 147 | 148 | 一个定义有部署变量的项目服务示例[Kubernetes Service](https://docs.gitlab.com/ce/user/project/integrations/kubernetes.html)。 149 | 150 | ## Debug tracing 151 | 152 | > GitLab Runner 1.7开始引入。 153 | > 154 | > **警告**:启用调试跟踪可能会严重的安全隐患。输出内容将包含所有的私有变量和其他的隐私!输出的内容将被上传到GitLab服务器并且将会在job记录中明显体现。 155 | 156 | 默认情况下,GitLab Runner会隐藏了处理job时正在做的大部分细节。这种行为使job跟踪很短,并且防止秘密泄露到跟踪中,除非您的脚本将他们输出到屏幕中。 157 | 158 | 如果job没有按照预期的运行,这也会让问题查找变得更加困难;在这种情况下,你可以在`.gitlab-ci.yml`中开启调试记录。它需要GitLab Runner v1.7版本以上,此功能可启用shell的执行记录,从而产生详细的job记录,列出所有执行的命令,设置变量等。 159 | 160 | 在启用此功能之前,您应该确保job只对[团队成](https://docs.gitlab.com/ce/user/permissions.html#project-features)员可见。您也应该https://docs.gitlab.com/ce/ci/pipelines.html#seeing-build-status所有生成的job记录,然后使其可见。 161 | 162 | 设置`CI_DEBUG_TRACE`变量的值为`true`来开启调试记录。 163 | 164 | ```yaml 165 | job_name: 166 | variables: 167 | CI_DEBUG_TRACE: "true" 168 | ``` 169 | 170 | 调试记录设置为TRUE的截断输出示例: 171 | 172 | ```shell 173 | ... 174 | 175 | export CI_SERVER_TLS_CA_FILE="/builds/gitlab-examples/ci-debug-trace.tmp/CI_SERVER_TLS_CA_FILE" 176 | if [[ -d "/builds/gitlab-examples/ci-debug-trace/.git" ]]; then 177 | echo $'\''\x1b[32;1mFetching changes...\x1b[0;m'\'' 178 | $'\''cd'\'' "/builds/gitlab-examples/ci-debug-trace" 179 | $'\''git'\'' "config" "fetch.recurseSubmodules" "false" 180 | $'\''rm'\'' "-f" ".git/index.lock" 181 | $'\''git'\'' "clean" "-ffdx" 182 | $'\''git'\'' "reset" "--hard" 183 | $'\''git'\'' "remote" "set-url" "origin" "https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@example.com/gitlab-examples/ci-debug-trace.git" 184 | $'\''git'\'' "fetch" "origin" "--prune" "+refs/heads/*:refs/remotes/origin/*" "+refs/tags/*:refs/tags/*" 185 | else 186 | $'\''mkdir'\'' "-p" "/builds/gitlab-examples/ci-debug-trace.tmp/git-template" 187 | $'\''rm'\'' "-r" "-f" "/builds/gitlab-examples/ci-debug-trace" 188 | $'\''git'\'' "config" "-f" "/builds/gitlab-examples/ci-debug-trace.tmp/git-template/config" "fetch.recurseSubmodules" "false" 189 | echo $'\''\x1b[32;1mCloning repository...\x1b[0;m'\'' 190 | $'\''git'\'' "clone" "--no-checkout" "https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@example.com/gitlab-examples/ci-debug-trace.git" "/builds/gitlab-examples/ci-debug-trace" "--template" "/builds/gitlab-examples/ci-debug-trace.tmp/git-template" 191 | $'\''cd'\'' "/builds/gitlab-examples/ci-debug-trace" 192 | fi 193 | echo $'\''\x1b[32;1mChecking out dd648b2e as master...\x1b[0;m'\'' 194 | $'\''git'\'' "checkout" "-f" "-q" "dd648b2e48ce6518303b0bb580b2ee32fadaf045" 195 | ' 196 | +++ hostname 197 | ++ echo 'Running on runner-8a2f473d-project-1796893-concurrent-0 via runner-8a2f473d-machine-1480971377-317a7d0f-digital-ocean-4gb...' 198 | Running on runner-8a2f473d-project-1796893-concurrent-0 via runner-8a2f473d-machine-1480971377-317a7d0f-digital-ocean-4gb... 199 | ++ export CI=true 200 | ++ CI=true 201 | ++ export CI_DEBUG_TRACE=false 202 | ++ CI_DEBUG_TRACE=false 203 | ++ export CI_COMMIT_SHA=dd648b2e48ce6518303b0bb580b2ee32fadaf045 204 | ++ CI_COMMIT_SHA=dd648b2e48ce6518303b0bb580b2ee32fadaf045 205 | ++ export CI_COMMIT_BEFORE_SHA=dd648b2e48ce6518303b0bb580b2ee32fadaf045 206 | ++ CI_COMMIT_BEFORE_SHA=dd648b2e48ce6518303b0bb580b2ee32fadaf045 207 | ++ export CI_COMMIT_REF_NAME=master 208 | ++ CI_COMMIT_REF_NAME=master 209 | ++ export CI_JOB_ID=7046507 210 | ++ CI_JOB_ID=7046507 211 | ++ export CI_REPOSITORY_URL=https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@example.com/gitlab-examples/ci-debug-trace.git 212 | ++ CI_REPOSITORY_URL=https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@example.com/gitlab-examples/ci-debug-trace.git 213 | ++ export CI_JOB_TOKEN=xxxxxxxxxxxxxxxxxxxx 214 | ++ CI_JOB_TOKEN=xxxxxxxxxxxxxxxxxxxx 215 | ++ export CI_PROJECT_ID=1796893 216 | ++ CI_PROJECT_ID=1796893 217 | ++ export CI_PROJECT_DIR=/builds/gitlab-examples/ci-debug-trace 218 | ++ CI_PROJECT_DIR=/builds/gitlab-examples/ci-debug-trace 219 | ++ export CI_SERVER=yes 220 | ++ CI_SERVER=yes 221 | ++ export 'CI_SERVER_NAME=GitLab CI' 222 | ++ CI_SERVER_NAME='GitLab CI' 223 | ++ export CI_SERVER_VERSION= 224 | ++ CI_SERVER_VERSION= 225 | ++ export CI_SERVER_REVISION= 226 | ++ CI_SERVER_REVISION= 227 | ++ export GITLAB_CI=true 228 | ++ GITLAB_CI=true 229 | ++ export CI=true 230 | ++ CI=true 231 | ++ export GITLAB_CI=true 232 | ++ GITLAB_CI=true 233 | ++ export CI_JOB_ID=7046507 234 | ++ CI_JOB_ID=7046507 235 | ++ export CI_JOB_TOKEN=xxxxxxxxxxxxxxxxxxxx 236 | ++ CI_JOB_TOKEN=xxxxxxxxxxxxxxxxxxxx 237 | ++ export CI_COMMIT_REF=dd648b2e48ce6518303b0bb580b2ee32fadaf045 238 | ++ CI_COMMIT_REF=dd648b2e48ce6518303b0bb580b2ee32fadaf045 239 | ++ export CI_COMMIT_BEFORE_SHA=dd648b2e48ce6518303b0bb580b2ee32fadaf045 240 | ++ CI_COMMIT_BEFORE_SHA=dd648b2e48ce6518303b0bb580b2ee32fadaf045 241 | ++ export CI_COMMIT_REF_NAME=master 242 | ++ CI_COMMIT_REF_NAME=master 243 | ++ export CI_COMMIT_NAME=debug_trace 244 | ++ CI_JOB_NAME=debug_trace 245 | ++ export CI_JOB_STAGE=test 246 | ++ CI_JOB_STAGE=test 247 | ++ export CI_SERVER_NAME=GitLab 248 | ++ CI_SERVER_NAME=GitLab 249 | ++ export CI_SERVER_VERSION=8.14.3-ee 250 | ++ CI_SERVER_VERSION=8.14.3-ee 251 | ++ export CI_SERVER_REVISION=82823 252 | ++ CI_SERVER_REVISION=82823 253 | ++ export CI_PROJECT_ID=17893 254 | ++ CI_PROJECT_ID=17893 255 | ++ export CI_PROJECT_NAME=ci-debug-trace 256 | ++ CI_PROJECT_NAME=ci-debug-trace 257 | ++ export CI_PROJECT_PATH=gitlab-examples/ci-debug-trace 258 | ++ CI_PROJECT_PATH=gitlab-examples/ci-debug-trace 259 | ++ export CI_PROJECT_NAMESPACE=gitlab-examples 260 | ++ CI_PROJECT_NAMESPACE=gitlab-examples 261 | ++ export CI_PROJECT_URL=https://example.com/gitlab-examples/ci-debug-trace 262 | ++ CI_PROJECT_URL=https://example.com/gitlab-examples/ci-debug-trace 263 | ++ export CI_PIPELINE_ID=52666 264 | ++ CI_PIPELINE_ID=52666 265 | ++ export CI_RUNNER_ID=1337 266 | ++ CI_RUNNER_ID=1337 267 | ++ export CI_RUNNER_DESCRIPTION=shared-runners-manager-1.example.com 268 | ++ CI_RUNNER_DESCRIPTION=shared-runners-manager-1.example.com 269 | ++ export 'CI_RUNNER_TAGS=shared, docker, linux, ruby, mysql, postgres, mongo' 270 | ++ CI_RUNNER_TAGS='shared, docker, linux, ruby, mysql, postgres, mongo' 271 | ++ export CI_REGISTRY=registry.example.com 272 | ++ CI_REGISTRY=registry.example.com 273 | ++ export CI_DEBUG_TRACE=true 274 | ++ CI_DEBUG_TRACE=true 275 | ++ export GITLAB_USER_ID=42 276 | ++ GITLAB_USER_ID=42 277 | ++ export GITLAB_USER_EMAIL=user@example.com 278 | ++ GITLAB_USER_EMAIL=user@example.com 279 | ++ export VERY_SECURE_VARIABLE=imaverysecurevariable 280 | ++ VERY_SECURE_VARIABLE=imaverysecurevariable 281 | ++ mkdir -p /builds/gitlab-examples/ci-debug-trace.tmp 282 | ++ echo -n '-----BEGIN CERTIFICATE----- 283 | MIIFQzCCBCugAwIBAgIRAL/ElDjuf15xwja1ZnCocWAwDQYJKoZIhvcNAQELBQAw' 284 | ... 285 | ``` 286 | 287 | ## Using the CI variables in your job scripts 288 | 289 | 在构建环境变量时,所有的变量都被设置为环境变量,他们可以使用普通方法访问这些变量。在大多数情况下,用于执行job脚本都是通过bash或者是sh。 290 | 291 | 想要访问环境变量,请示使用一下Runner对应的语法: 292 | 293 | | Shell | 用法 | 294 | | ------------- | --------------- | 295 | | bash/sh | `$variable` | 296 | | windows batch | `%variable%` | 297 | | PowerShell | `$env:variable` | 298 | 299 | 在bash中访问环境变量,需要给变量名称加上前缀(`$`): 300 | 301 | ```yaml 302 | job_name: 303 | script: 304 | - echo $CI_JOB_ID 305 | ``` 306 | 307 | 在Windows系统的PowerShell中访问环境变量,需要给变量名称加上前缀(`$env:`): 308 | 309 | ```yaml 310 | job_name: 311 | script: 312 | - echo $env:CI_JOB_ID 313 | ``` 314 | 315 | 您可以使用`export`命令来列出所有的环境变量。在使用此命令时要注意,此命令也会在job记录中列出所有私有变量的值: 316 | 317 | ```yaml 318 | job_name: 319 | script: 320 | - export 321 | ``` 322 | 323 | 实例的值: 324 | 325 | ```shell 326 | export CI_JOB_ID="50" 327 | export CI_COMMIT_SHA="1ecfd275763eff1d6b4844ea3168962458c9f27a" 328 | export CI_COMMIT_REF_NAME="master" 329 | export CI_REPOSITORY_URL="https://gitlab-ci-token:abcde-1234ABCD5678ef@example.com/gitlab-org/gitlab-ce.git" 330 | export CI_COMMIT_TAG="1.0.0" 331 | export CI_JOB_NAME="spec:other" 332 | export CI_JOB_STAGE="test" 333 | export CI_JOB_MANUAL="true" 334 | export CI_JOB_TRIGGERED="true" 335 | export CI_JOB_TOKEN="abcde-1234ABCD5678ef" 336 | export CI_PIPELINE_ID="1000" 337 | export CI_PROJECT_ID="34" 338 | export CI_PROJECT_DIR="/builds/gitlab-org/gitlab-ce" 339 | export CI_PROJECT_NAME="gitlab-ce" 340 | export CI_PROJECT_NAMESPACE="gitlab-org" 341 | export CI_PROJECT_PATH="gitlab-org/gitlab-ce" 342 | export CI_PROJECT_URL="https://example.com/gitlab-org/gitlab-ce" 343 | export CI_REGISTRY="registry.example.com" 344 | export CI_REGISTRY_IMAGE="registry.example.com/gitlab-org/gitlab-ce" 345 | export CI_RUNNER_ID="10" 346 | export CI_RUNNER_DESCRIPTION="my runner" 347 | export CI_RUNNER_TAGS="docker, linux" 348 | export CI_SERVER="yes" 349 | export CI_SERVER_NAME="GitLab" 350 | export CI_SERVER_REVISION="70606bf" 351 | export CI_SERVER_VERSION="8.9.0" 352 | export GITLAB_USER_ID="42" 353 | export GITLAB_USER_EMAIL="user@example.com" 354 | export CI_REGISTRY_USER="gitlab-ci-token" 355 | export CI_REGISTRY_PASSWORD="longalfanumstring" 356 | ``` -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 |英文文档地址:https://docs.gitlab.com/
549 |已完成内容:
550 || 修改时间 | 内容 | 554 |说明 | 文档地址 | 555 |
|---|---|---|---|
| 2017-12-29 | 560 |gitlab-ci-yaml | 561 |yaml配置文档 | 562 |https://fennay.github.io/gitlab-ci-cn/gitlab-ci-yaml.html 563 | | 564 |
| 2017-07-02 | 567 |Variables | 568 |变量说明 | 569 |https://fennay.github.io/gitlab-ci-cn/variables.html | 570 |
| 2018-01-05 | 573 |Quick start guide | 574 |快速引导页 | 575 |https://fennay.github.io/gitlab-ci-cn/quick_start.html | 576 |
| 2018-01-10 | 579 |GitLab Continuous Integration | 580 |GitLab CI | 581 |https://fennay.github.io/gitlab-ci-cn/gitlab-ci.html | 582 |
| 2018-06-23 | 585 |Pipelines and jobs | 586 |管道 | 587 |https://fennay.github.io/gitlab-ci-cn/pipelines.html | 588 |

当自动化在你的工作中扮演一个不可或缺的角色时,持续集成带来的收益是巨大的。GitLab具有内置的持续集成、持续部署和持续交付来构建、测试和部署应用程序。
这里有一些我们收集到的信息带你开始持续集成。
向你的GitLab CI旅程迈出的第一步。
参考文章
视频:
第三方视频
一旦你熟悉了入门指南,你就会发现自己回去查阅特定的参考指南。
.gitlab-ci.yml指南 - 了解关于.gitlab-ci.yml的所有细节和参数设置。
CI Variables - 了解如何在你的.gitlab-ci.yml中使用变量或者保证项目中变量安全。
权限模型 - 了解用户执行某些CI操作的访问级别
利用Docker的力量来运行CI piplis。
使用docker 镜像执行GitLab Runner。
使用CI构建docker镜像
CI 服务(链接docker容器)
文章
一旦你熟悉了GitLab CI的基础知识,就该开始学习如何利用它的潜能了。
See the topic on GitLab Pages.
你可以在你的整个GitLab实例以及每个项目中更改GitLab CI的默认行为。
Project specific
Affecting the whole GitLab instance
注意:GitLab CI Yml 项目是官方维护的
.gitlab-ci.yml文件集合。如果你最爱的编程语言或框架没有.gitlab-ci.yml文件,我们非常欢迎你通过提交merge request来帮忙。
这里有一些关于设置CI pipline的教程和指南。
参考文章:
杂项
参考文章:
参考文章:
官方文档:https://docs.gitlab.com/ee/ci/pipelines.html
在GitLab 8.8中引入的。
注意:如果你的项目是从GitLab中拉取的镜像仓库,需要在项目中开启触动开关
Settings > Repository > Pull from a remote repository > Trigger pipelines for mirror updates.
管道是一组分阶段(批处理)执行的工作。同一个阶段中的所有工作都是并行执行的(如果有足够的并发Runners),如果它们全部成功,管道就进入下一个阶段。如果其中一个jobs失败,则下一个阶段不(通常)执行。您可以访问项目的Pipeline选项卡中的管道页面。
在下图中,您可以看到管道由4个阶段组成(build(构建), test(测试), staging(分级), production(生产)),每个阶段都有一个或多个工作。
注意:在GitLab pipeline图上显示时,应当大写显示stats的名称。

管道分三种,但是通常都使用单一的“管道”来代替所有。人们经常谈论他们,就好像每个都是“管道”一样,但实际上,他们只是综合管道的一部分。
CI Pipeline: 在gitlab-ci.yml中定义的构建和测试阶段。
Deploy Pipeline: 在.gitlab-ci.yml中定义的部署阶段,用来通过各种各样的方式将代码部署到服务器:
例如,将代码发布到生成环境
Project Pipeline:通过API触发跨项目CI依赖关系,尤其是针对微服务,但也适用于复杂的构建依赖关系:
例如,api-> front-end,ce / ee-> omnibus。
管道适应多种开发工作流程:
连续交付流程示例:
工作可以在.gitlab-ci.yml文件中定义。不要与build工作或build 阶段混淆。
在.gitlab-ci.yml中通过指定阶段运行的作业来定义管道。
您可以在项目的 Pipeline选项卡下找到当前和历史运行的管道 。点击管道将显示为该管道运行的作业。

当您访问单个管道时,您可以看到该管道的相关作业。点击单个作业会显示该作业运行历史,并允许您取消作业,重试作业或清除作业运行日志。
在GitLab 10.7中引入。
当管道发生故障或允许失败时,有几个地方可以快速检查失败的原因:
无论任何方式中,你将鼠标悬停在失败的作业上,你可以看到失败的原因。
从GitLab 10.8中,您还可以在工作详情页面上看到失败的原因。
在GitLab 8.11中引入。
管道可以是复杂的结构,具有许多顺序和平行的作业。为了让您更容易看到发生了什么,它可以查看单个管道及其状态。
管道图可以通过两种不同的方式显示,具体取决于您所处的页面。
当您在单个管道页面上时,可以找到显示每个阶段作业名称的常规管道图。
其次,有管道迷你图,占用更少的空间,并且可以快速浏览所有作业是成果还是失败。管道迷你图可以在您访问以下页面时找到:
通过这种方式,您可以看到所有相关的作业以及每个阶段的最终结果。这使您可以快速查看失败的工作并修复它。管道迷你图的阶段是可折叠的。将鼠标悬停在它们上面,然后单击以展开其他作业。
在GitLab 8.12中引入。
如果你有许多类似的工作,你的管道图会变得很长,很难阅读。出于这个原因,类似的工作可以自动组合在一起。如果作业名称以某种格式命名,则它们将在常规管线图(非迷你图)中折叠为一个组。如果您没有看到重试或取消按钮,您就知道管道将作业已经合并分组了。将鼠标悬停在上面会显示分组作业的数量。可以点击展开它们。
基本要求是需使用以下方式的一种将两个数字分隔开(可以互换使用)(查看下面的示例):
/):)注意: 更准确地说,它使用这个正则表达式:
\d+[\s:\/\\]+\d+\s*。
这些工作将通过从左到右比较这两个数字来进行排序。通常第一个是索引,第二个是总数。
例如,以下作业将被分组在一个名为的作业下test:
test 0 3 => testtest 1 3 => testtest 2 3 => test以下作业将被分组在下列作业中test ruby:
test 1:2 ruby => test rubytest 2:2 ruby => test ruby下列作业也将被归类在一个作业中test ruby:
1/3 test ruby => test ruby2/3 test ruby => test ruby3/3 test ruby => test ruby在GitLab 8.15中引入。
手动操作允许您在使用CI中的指定作业之前需要手动操作。整个管道可以自动运行,但实际部署到生产需要点击。
您可以直接从管道图中做到这一点。只需点击播放按钮即可执行指定作业。例如,在下面的图片中,production 舞台上有一项手动操作。
常规管道图
在单个管道页面中,作业按名称排序。
迷你管道图
在GitLab 9.0中引入。
在管道迷你图中,作业首先按重要性排序,然后按名称排序。重要性的顺序是:
可在GitLab Premium 、GitLab Sliver或更高级版本中使用。
多项目管道,您可以访问跨项目管道。
管道的总运行时间将排除重试和待处理(排队)时间。我们可以将这个问题缩减为寻找周期的联合。
所以每个工作都会被表示为 Period,其中包括 Period#first工作开始Period#last时和工作完成时。一个简单的例子是:
这里A从1开始,到3结束。B从2开始,并到4结束。C从6开始,到7结束。视觉上它可以被看作:
0 1 2 3 4 5 6 7AAAAAAABBBBBBBCCCC
A,B和C的联合将是(1,4)和(6,7),因此总运行时间应该是:
xxxxxxxxxx(4 - 1) + (7 - 6) => 4
管道状态和测试范围内报告徽章可用。您可以在管道设置页面找到它们各自的链接。
管道在受保护的分支上执行时,将执行严格的安全模型 。
只有在允许用户合并或推送 特定分支时,才允许在受保护的分支上执行以下操作 :
标记为受保护的变量仅适用于在受保护分支上运行的作业,从而避免不受信任的用户无意中访问敏感信息,如部署凭证和令牌。
标记为受保护的Runners只能保护分支机构运行的作业,避免不受信任的代码要在保护runner和保存部署键被意外地触发或其他凭证执行。为了确保打算在受保护的跑步者上执行的工作不会使用常规runner,必须对其进行相应标记。
官方原文档:https://docs.gitlab.com/ee/ci/quick_start/README.html
注:从8.0版本开始,GitLab 持续集成(CI)完全集成到GitLab中,且默认所有的项目开启。
GitLab提供持续集成服务。如果添加一个.gitlab-ci.yml文件到项目根目录,并配置GitLab项目使用某个Runner,然后每一次提交或者是推送都会触发CI pipeline.
.gitlab-ci.yml文件会告诉GitLab Runner 做什么。默认情况下,它运行一个pipeline,分为三个阶段:build,test,deploy。你并不需要用到所有的阶段,没有job的阶段会被忽略。
如果一切运行正常(没有非零的返回值),您将得到与commit关联的漂亮的绿色标记。这使得在查看代码之前,很容易就能看出是否有一个提交导致了测试失败。
大多数项目使用GitLab CI服务来运行测试套件,这样如果开发人员发现问题就会及时得到反馈。
因此,简而言之,CI所需要的步骤可以归结为:
.gitlab-ci.yml到项目的根目录从此刻开始,在每一次push到Git仓库的过程中,Runner会自动开启pipline,pipline将显示在项目的Pipline页面中。
本指南要求:
让我们把它分解成碎片,并致力于解决GitLab CI之谜。
.gitlab-ci.yml在创建.gitlab-ci.yml之前,我们先对它进行个简单的解释。
.gitlab-ci.yml是什么.gitlab-ci.yml是用来配置CI在我们的项目中做些什么工作。它位于项目的根目录。
在任何的push操作,GitLab都会寻找.gitlab-ci.yml文件,并对此次commit开始jobs,jobs的内容来源于.gitlab-ci.yml文件。
因为.gitlab-ci.yml是存在于我们的项目仓库中,并且受版本控制的,所以旧版本也可以执行成功,且使用CI可以让forks更容易,分支可也以拥有不同的pipelines和jobs,而且对于CI来说只会拥有单一的来源。你也可以在我们的博客中找到我们为什么使用.gitlab-ci.yml的原因。
.gitlab-ci.yml注意:
.gitlab-ci.yml是一个YAML文件,所以必须要格外注意锁紧。使用空格,而不是tabs。
在项目的根目录创建一个名为.gitlab-ci.yml的文件。下面是一个Ruby on Rails项目的示例。
before_scriptapt-get update -qq && apt-get install -y -qq sqlite3 libsqlite3-dev nodejsruby -vwhich rubygem install bundler --no-ri --no-rdocbundle install --jobs $(nproc) "${FLAGS[@]}"rspec scriptbundle exec rspecrubocop scriptbundle exec rubocop这是大多数Ruby应用程序最简单的配置:
rspec和rubocop(名字可以随便取),他们执行不同的命令。before_script定义的命令都将会被执行。.gitlab-ci.yml定义了一系列的jobs,其中包含如何运行和何时运行的限制。jobs必须定义一个名称(在示例中分别是rspec和rubocop)作为顶级元素,而且总是必须包含script关键字。Jobs被用来创建任务,它们会被Runners接受和环境中的Runner执行。
重要的是,每个工作都是独立运行的。
如果你想检验.gitlab-ci.yml文件的语法是否正确,在GitLab实例页面中有一个命令行工具/ci/lint。也可以从项目中的CI/CD ➔ Pipelines and Pipelines ➔ Jobs找到此页面。
关于更多.gitlab-ci.yml的信息和语法,请阅读.gitlab-ci.yml参考文档。
.gitlab-ci.yml到GitLab一旦创建了.gitlab-ci.yml,你应该及时添加到Git仓库并推送到GitLab。
git add .gitlab-ci.ymlgit commit -m "Add .gitlab-ci.yml"git push origin master现在到Pipelines页面查看,将会看到该Pipline处于等待状态。
你也可以到Commits页面查看,并会发现SHA旁边的暂停按钮。

点击它即可进入到该特定commit的jobs页面。

在GitLab中,Runners将会运行你在.gitlab-ci.yml中定义的jobs。Runner可以是虚拟机,VPS,裸机,docker容器,甚至一堆容器。GitLab和Runners通过API通信,所以唯一的要求就是运行Runners的机器可以联网。
一个Runner可以服务GitLab中的某个特定的项目或者是多个项目。如果它服务所有的项目,则被称为共享的Runner。
在Runners文档中查阅更多关于不同Runners的信息。
你可以通过Settings->CI/CD查找是否有Runners分配到你的项目中。创建一个Runner是简单且直接的。官方支持的Runner是用GO语言写的,它的文档在这里https://docs.gitlab.com/runner/。
为了有一个功能性的Runner,你需要遵循以下步骤:
按照上面的连接设置你自己的Runner或者使用下一节介绍的共享Runner。
一旦Runner安装好,你可以从项目的Settings->CI/CD找到Runner页面。

如果你用的是GitLab.com,你可以使用GitLab公司提供的共享Runners。
这些是运行在GitLab基础设置上面的特殊虚拟机,可以构建任何项目。
你可以通过项目中的Settings->CI/CD找到Shared Runners,并点击开启它。
成功的配置好Runner后,你应该查看最后一次提交后的状态,从pending、到执行中、成功或失败。
你可以通过项目中的Piplines页面查看所有的piplines。

也可以通过Piplines->Jobs页面查看所有的jobs。

通过点击jobs的状态,查看该job的日志。这对于帮助诊断job失败或者job与预期结果不同很重要。

你还可以查看在GitLab的各种页面中的任何提交状态,例如Commits和Merge requests。
在这里,可以查看各种语言使用GitLab CI的示例。