GitLab CI/CD快速入门
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><code>.gitlab-ci.yml</code>是什么</li><li>
创建一个简单的<code>.gitlab-ci.yml</code>
</li><li>
推送<code>.gitlab-ci.yml</code>到GitLab</li><li>
配置Runner</li><li><img src="https://zhuji.jb51.net/uploads/img/20230519/fb7e19a20593a9e13ac0afceac1c87a4.jpg" width="1024" height="283"></li><li>
共享Runners</li><li>
查看pipeline和jobs的状态</li><li>
实例</li></ul></div><p>官方原文档:https://docs.gitlab.com/ee/ci/quick_start/README.html</p>
<blockquote><p>注:从8.0版本开始,GitLab *###&*_1_*###&*(CI)完全集成到GitLab中,且默认所有的项目开启。</p></blockquote>
<p>GitLab提供持续集成服务。如果添加一个<code>.gitlab-ci.yml</code>文件到项目根目录,并配置GitLab项目使用某个Runner,然后每一次提交或者是推送都会触发CI pipeline.</p>
<p><code>.gitlab-ci.yml</code>文件会告诉GitLab Runner 做什么。默认情况下,它运行一个<code>pipeline</code>,分为三个阶段:<code>build</code>,<code>test</code>,<code>deploy</code>。你并不需要用到所有的阶段,没有<code>job</code>的阶段会被忽略。</p>
<p>如果一切运行正常(没有非零的返回值),您将得到与commit关联的漂亮的绿色标记。这使得在查看代码之前,很容易就能看出是否有一个提交导致了测试失败。</p>
<p>大多数项目使用GitLab CI服务来运行测试套件,这样如果开发人员发现问题就会及时得到反馈。</p>
<p>因此,简而言之,CI所需要的步骤可以归结为:</p>
<p>1. 添加<code>.gitlab-ci.yml</code>到项目的根目录</p>
<p>2. 配置一个Runner</p>
<p>从此刻开始,在每一次push到Git仓库的过程中,Runner会自动开启pipline,pipline将显示在项目的Pipline页面中。</p>
<hr>
<p>本指南要求:</p>
<ul>
<li>使用版本8.0+ 的GitLab实例或者是使用GitLab.com
</li>
<li>一个想使用GitLab CI的项目</li>
</ul>
<p>让我们把它分解成碎片,并致力于解决GitLab CI之谜。</p>
<h1>
创建<code>.gitlab-ci.yml</code>
</h1>
<p>在创建<code>.gitlab-ci.yml</code>之前,我们先对它进行个简单的解释。</p>
<p class="maodian"></p><h2>
<code>.gitlab-ci.yml</code>是什么</h2>
<p><code>.gitlab-ci.yml</code>是用来配置CI在我们的项目中做些什么工作。它位于项目的根目录。</p>
<p>在任何的push操作,GitLab都会寻找<code>.gitlab-ci.yml</code>文件,并对此次commit开始jobs,jobs的内容来源于<code>.gitlab-ci.yml</code>文件。</p>
<p>因为<code>.gitlab-ci.yml</code>是存在于我们的项目仓库中,并且受版本控制的,所以旧版本也可以执行成功,且使用CI可以让forks更容易,分支可也以拥有不同的pipelines和jobs,而且对于CI来说只会拥有单一的来源。你也可以在我们的博客中找到我们为什么使用<code>.gitlab-ci.yml</code>的原因。</p>
<p class="maodian"></p><h2>
创建一个简单的<code>.gitlab-ci.yml</code>
</h2>
<blockquote><p>注意:<code>.gitlab-ci.yml</code>是一个*###&*_10_*###&*文件,所以必须要格外注意锁紧。使用空格,而不是tabs。</p></blockquote>
<p>在项目的根目录创建一个名为<code>.gitlab-ci.yml</code>的文件。下面是一个Ruby on Rails项目的示例。</p><pre class="brush:bash;toolbar:false">before_script:
- apt-get update -qq && apt-get install -y -qq sqlite3 libsqlite3-dev nodejs
- ruby -v
- which ruby
- gem install bundler --no-ri --no-rdoc
- bundle install --jobs $(nproc)"${FLAGS[@]}"
rspec:
script:
- bundle exec rspec
rubocop:
script:
- bundle exec rubocop</pre><p>这是大多数Ruby应用程序最简单的配置:</p>
<ol>
<li>定义了两个jobs,<code>rspec</code>和<code>rubocop</code>(名字可以随便取),他们执行不同的命令。</li>
<li>在每个jobs之前,<code>before_script</code>定义的命令都将会被执行。</li>
</ol>
<p><code>.gitlab-ci.yml</code>定义了一系列的jobs,其中包含如何运行和何时运行的限制。jobs必须定义一个名称(在示例中分别是<code>rspec</code>和<code>rubocop</code>)作为顶级元素,而且总是必须包含<code>script</code>关键字。Jobs被用来创建任务,它们会被Runners接受和环境中的Runner执行。</p>
<p>重要的是,每个工作都是独立运行的。</p>
<p>如果你想检验<code>.gitlab-ci.yml</code>文件的语法是否正确,在GitLab实例页面中有一个命令行工具<code>/ci/lint</code>。也可以从项目中的<strong>CI/CD ➔ Pipelines</strong> and <strong>Pipelines ➔ Jobs</strong>找到此页面。</p>
<p>关于更多<code>.gitlab-ci.yml</code>的信息和语法,请阅读.gitlab-ci.yml参考文档。</p>
<p class="maodian"></p><h2>
推送<code>.gitlab-ci.yml</code>到GitLab</h2>
<p>一旦创建了<code>.gitlab-ci.yml</code>,你应该及时添加到Git仓库并推送到GitLab。</p><pre class="brush:bash;toolbar:false">git add .gitlab-ci.yml
git commit -m "Add .gitlab-ci.yml"
git push origin master</pre><p>现在到<strong>Pipelines</strong>页面查看,将会看到该Pipline处于等待状态。</p>
<p>你也可以到<strong>Commits</strong>页面查看,并会发现SHA旁边的暂停按钮。</p>
<p><img src="https://zhuji.jb51.net/uploads/img/20230519/fec05dedf11c310c00ac3e81ab430621.jpg" width="764" height="102"></p>
<p>点击它即可进入到该特定commit的jobs页面。</p>
<p><img src="https://zhuji.jb51.net/uploads/img/20230519/42d0dbec140c3c05c86132acafab4562.jpg" width="1024" height="313"></p>
<p class="maodian"></p><h2>
配置Runner</h2>
<p>在GitLab中,Runners将会运行你在<code>.gitlab-ci.yml</code>中定义的jobs。Runner可以是虚拟机,VPS,裸机,docker容器,甚至一堆容器。GitLab和Runners通过API通信,所以唯一的要求就是运行Runners的机器可以联网。</p>
<p>一个Runner可以服务GitLab中的某个特定的项目或者是多个项目。如果它服务所有的项目,则被称为共享的Runner。</p>
<p>在Runners文档中查阅更多关于不同Runners的信息。</p>
<p>你可以通过<strong>Settings->CI/CD</strong>查找是否有Runners分配到你的项目中。创建一个Runner是简单且直接的。官方支持的Runner是用GO语言写的,它的文档在这里https://docs.gitlab.com/runner/。</p>
<p>为了有一个功能性的Runner,你需要遵循以下步骤:</p>
<ol>
<li>安装</li>
<li>配置</li>
</ol>
<p>按照上面的连接设置你自己的Runner或者使用下一节介绍的共享Runner。</p>
<p>一旦Runner安装好,你可以从项目的<strong>Settings->CI/CD</strong>找到Runner页面。</p>
<p class="maodian"></p><h2><img src="https://zhuji.jb51.net/uploads/img/20230519/fb7e19a20593a9e13ac0afceac1c87a4.jpg" width="1024" height="283"></h2>
<p class="maodian"></p><h2>
共享Runners</h2>
<p>如果你用的是GitLab.com,你可以使用GitLab公司提供的共享Runners。</p>
<p>这些是运行在GitLab基础设置上面的特殊虚拟机,可以构建任何项目。</p>
<p>你可以通过项目中的<strong>Settings->CI/CD</strong>找到<strong>Shared Runners</strong>,并点击开启它。</p>
<p>阅读更多关于共享Runners。</p>
<p class="maodian"></p><h2>
查看pipeline和jobs的状态</h2>
<p>成功的配置好Runner后,你应该查看最后一次提交后的状态,从<em>pending</em>、到<em>执行中</em>、<em>成功</em>或<em>失败</em>。</p>
<p>你可以通过项目中的Piplines页面查看所有的piplines。</p>
<p><img src="https://zhuji.jb51.net/uploads/img/20230519/19ebe99d19bcec4269ec0e2e8c434318.jpg" width="1024" height="355"></p>
<p>也可以通过<strong>Piplines->Jobs</strong>页面查看所有的jobs。</p>
<p><img src="https://zhuji.jb51.net/uploads/img/20230519/156a351538f4fe6f39474f463e7a7a71.jpg" width="1024" height="278"></p>
<p>通过点击jobs的状态,查看该job的日志。这对于帮助诊断job失败或者job与预期结果不同很重要。</p>
<p><img src="https://zhuji.jb51.net/uploads/img/20230519/a84a4e8d58f8a8beba505a0c81c5eed5.jpg" width="1024" height="494"></p>
<p>你还可以查看在GitLab的各种页面中的任何提交状态,例如<strong>Commits</strong>和<strong>Merge requests</strong>。</p>
<p class="maodian"></p><h2>
实例</h2>
<p>在这里,可以查看各种语言使用GitLab CI的示例。</p>
頁:
[1]