mirror of
https://github.com/telekom-security/tpotce.git
synced 2025-04-29 11:48:52 +00:00
323 lines
26 KiB
Text
323 lines
26 KiB
Text
![]() |
<!DOCTYPE html>
|
||
|
|
||
|
<html class="" lang="en">
|
||
|
<head prefix="og: http://ogp.me/ns#">
|
||
|
<meta charset="utf-8"/>
|
||
|
<meta content="IE=edge" http-equiv="X-UA-Compatible"/>
|
||
|
<meta content="object" property="og:type"/>
|
||
|
<meta content="GitLab" property="og:site_name"/>
|
||
|
<meta content="Readme · Quick start · Ci · Help" property="og:title"/>
|
||
|
<meta content="GitLab Community Edition" property="og:description"/>
|
||
|
<meta content="http://172.20.254.127/assets/gitlab_logo-7ae504fe4f68fdebb3c2034e36621930cd36ea87924c11ff65dbcb8ed50dca58.png" property="og:image"/>
|
||
|
<meta content="64" property="og:image:width"/>
|
||
|
<meta content="64" property="og:image:height"/>
|
||
|
<meta content="http://172.20.254.127/help/ci/quick_start/README.md" property="og:url"/>
|
||
|
<meta content="summary" property="twitter:card"/>
|
||
|
<meta content="Readme · Quick start · Ci · Help" property="twitter:title"/>
|
||
|
<meta content="GitLab Community Edition" property="twitter:description"/>
|
||
|
<meta content="http://172.20.254.127/assets/gitlab_logo-7ae504fe4f68fdebb3c2034e36621930cd36ea87924c11ff65dbcb8ed50dca58.png" property="twitter:image"/>
|
||
|
<title>Readme · Quick start · Ci · Help · GitLab</title>
|
||
|
<meta content="GitLab Community Edition" name="description"/>
|
||
|
<link data-original-href="/assets/favicon-7901bd695fb93edb07975966062049829afb56cf11511236e61bcf425070e36e.png" href="/assets/favicon-7901bd695fb93edb07975966062049829afb56cf11511236e61bcf425070e36e.png" id="favicon" rel="shortcut icon" type="image/png"/>
|
||
|
<link href="/assets/application-266f2bfa52ff531258d13c702895a14fd5994ca591fa2df7338da00ab18c99ac.css" media="all" rel="stylesheet"/>
|
||
|
<link href="/assets/print-c8ff536271f8974b8a9a5f75c0ca25d2b8c1dceb4cff3c01d1603862a0bdcbfc.css" media="print" rel="stylesheet"/>
|
||
|
<script>
|
||
|
//<![CDATA[
|
||
|
window.gon={};gon.api_version="v4";gon.default_avatar_url="http://172.20.254.127/assets/no_avatar-849f9c04a3a0d0cea2424ae97b27447dc64a7dbfae83c036c45b403392f0e8ba.png";gon.max_file_size=10;gon.asset_host=null;gon.webpack_public_path="/assets/webpack/";gon.relative_url_root="";gon.shortcuts_path="/help/shortcuts";gon.user_color_scheme="white";gon.gitlab_url="http://172.20.254.127";gon.revision="63daf37";gon.gitlab_logo="/assets/gitlab_logo-7ae504fe4f68fdebb3c2034e36621930cd36ea87924c11ff65dbcb8ed50dca58.png";gon.sprite_icons="/assets/icons-07542808fffaf82e9b57b144464ea42620b32f65ce441c01528d23d4b96d5f11.svg";gon.sprite_file_icons="/assets/file_icons-7262fc6897e02f1ceaf8de43dc33afa5e4f9a2067f4f68ef77dcc87946575e9e.svg";gon.emoji_sprites_css_path="/assets/emoji_sprites-289eccffb1183c188b630297431be837765d9ff4aed6130cf738586fb307c170.css";gon.test_env=false;gon.suggested_label_colors=["#0033CC","#428BCA","#44AD8E","#A8D695","#5CB85C","#69D100","#004E00","#34495E","#7F8C8D","#A295D6","#5843AD","#8E44AD","#FFECDB","#AD4363","#D10069","#CC0033","#FF0000","#D9534F","#D1D100","#F0AD4E","#AD8D43"];
|
||
|
//]]>
|
||
|
</script>
|
||
|
<script defer="defer" src="/assets/webpack/runtime.9fcb75d4.bundle.js"></script>
|
||
|
<script defer="defer" src="/assets/webpack/main.a66b6c66.chunk.js"></script>
|
||
|
<script defer="defer" src="/assets/webpack/pages.help.show.c42c0700.chunk.js"></script>
|
||
|
<meta content="authenticity_token" name="csrf-param">
|
||
|
<meta content="BKm1VQpc7cz2KimD877S37AAbcXsjTc7038kRPYB3RFN8pHygBLaSLaTZJIaJfiC+jESP4cbPFc1+trYAuvGOA==" name="csrf-token">
|
||
|
<meta content="origin-when-cross-origin" name="referrer"/>
|
||
|
<meta content="width=device-width, initial-scale=1, maximum-scale=1" name="viewport"/>
|
||
|
<meta content="#474D57" name="theme-color"/>
|
||
|
<link href="/assets/touch-icon-iphone-5a9cee0e8a51212e70b90c87c12f382c428870c0ff67d1eb034d884b78d2dae7.png" rel="apple-touch-icon" type="image/x-icon"/>
|
||
|
<link href="/assets/touch-icon-ipad-a6eec6aeb9da138e507593b464fdac213047e49d3093fc30e90d9a995df83ba3.png" rel="apple-touch-icon" sizes="76x76" type="image/x-icon"/>
|
||
|
<link href="/assets/touch-icon-iphone-retina-72e2aadf86513a56e050e7f0f2355deaa19cc17ed97bbe5147847f2748e5a3e3.png" rel="apple-touch-icon" sizes="120x120" type="image/x-icon"/>
|
||
|
<link href="/assets/touch-icon-ipad-retina-8ebe416f5313483d9c1bc772b5bbe03ecad52a54eba443e5215a22caed2a16a2.png" rel="apple-touch-icon" sizes="152x152" type="image/x-icon"/>
|
||
|
<link color="rgb(226, 67, 41)" href="/assets/logo-d36b5212042cebc89b96df4bf6ac24e43db316143e89926c0db839ff694d2de4.svg" rel="mask-icon"/>
|
||
|
<meta content="/assets/msapplication-tile-1196ec67452f618d39cdd85e2e3a542f76574c071051ae7effbfde01710eb17d.png" name="msapplication-TileImage"/>
|
||
|
<meta content="#30353E" name="msapplication-TileColor"/>
|
||
|
</meta></meta></head>
|
||
|
<body class="ui-indigo " data-group="" data-page="help:show" data-project="">
|
||
|
<header class="navbar navbar-gitlab qa-navbar navbar-expand-sm">
|
||
|
<a class="sr-only gl-accessibility" href="#content-body" tabindex="1">Skip to content</a>
|
||
|
<div class="container-fluid">
|
||
|
<div class="header-content">
|
||
|
<div class="title-container">
|
||
|
<h1 class="title">
|
||
|
<a href="/" id="logo" title="Dashboard"><svg class="tanuki-logo" height="24" viewbox="0 0 36 36" width="24">
|
||
|
<path class="tanuki-shape tanuki-left-ear" d="M2 14l9.38 9v-9l-4-12.28c-.205-.632-1.176-.632-1.38 0z" fill="#e24329"></path>
|
||
|
<path class="tanuki-shape tanuki-right-ear" d="M34 14l-9.38 9v-9l4-12.28c.205-.632 1.176-.632 1.38 0z" fill="#e24329"></path>
|
||
|
<path class="tanuki-shape tanuki-nose" d="M18,34.38 3,14 33,14 Z" fill="#e24329"></path>
|
||
|
<path class="tanuki-shape tanuki-left-eye" d="M18,34.38 11.38,14 2,14 6,25Z" fill="#fc6d26"></path>
|
||
|
<path class="tanuki-shape tanuki-right-eye" d="M18,34.38 24.62,14 34,14 30,25Z" fill="#fc6d26"></path>
|
||
|
<path class="tanuki-shape tanuki-left-cheek" d="M2 14L.1 20.16c-.18.565 0 1.2.5 1.56l17.42 12.66z" fill="#fca326"></path>
|
||
|
<path class="tanuki-shape tanuki-right-cheek" d="M34 14l1.9 6.16c.18.565 0 1.2-.5 1.56L18 34.38z" fill="#fca326"></path>
|
||
|
</svg>
|
||
|
<span class="logo-text d-none d-sm-block">
|
||
|
<svg viewbox="0 0 617 169" xmlns="http://www.w3.org/2000/svg"><path d="M315.26 2.97h-21.8l.1 162.5h88.3v-20.1h-66.5l-.1-142.4M465.89 136.95c-5.5 5.7-14.6 11.4-27 11.4-16.6 0-23.3-8.2-23.3-18.9 0-16.1 11.2-23.8 35-23.8 4.5 0 11.7.5 15.4 1.2v30.1h-.1m-22.6-98.5c-17.6 0-33.8 6.2-46.4 16.7l7.7 13.4c8.9-5.2 19.8-10.4 35.5-10.4 17.9 0 25.8 9.2 25.8 24.6v7.9c-3.5-.7-10.7-1.2-15.1-1.2-38.2 0-57.6 13.4-57.6 41.4 0 25.1 15.4 37.7 38.7 37.7 15.7 0 30.8-7.2 36-18.9l4 15.9h15.4v-83.2c-.1-26.3-11.5-43.9-44-43.9M557.63 149.1c-8.2 0-15.4-1-20.8-3.5V70.5c7.4-6.2 16.6-10.7 28.3-10.7 21.1 0 29.2 14.9 29.2 39 0 34.2-13.1 50.3-36.7 50.3m9.2-110.6c-19.5 0-30 13.3-30 13.3v-21l-.1-27.8h-21.3l.1 158.5c10.7 4.5 25.3 6.9 41.2 6.9 40.7 0 60.3-26 60.3-70.9-.1-35.5-18.2-59-50.2-59M77.9 20.6c19.3 0 31.8 6.4 39.9 12.9l9.4-16.3C114.5 6 97.3 0 78.9 0 32.5 0 0 28.3 0 85.4c0 59.8 35.1 83.1 75.2 83.1 20.1 0 37.2-4.7 48.4-9.4l-.5-63.9V75.1H63.6v20.1h38l.5 48.5c-5 2.5-13.6 4.5-25.3 4.5-32.2 0-53.8-20.3-53.8-63-.1-43.5 22.2-64.6 54.9-64.6M231.43 2.95h-21.3l.1 27.3v94.3c0 26.3 11.4 43.9 43.9 43.9 4.5 0 8.9-.4 13.1-1.2v-19.1c-3.1.5-6.4.7-9.9.7-17.9 0-25.8-9.2-25.8-24.6v-65h35.7v-17.8h-35.7l-.1-38.5M155.96 165.47h21.3v-124h-21.3v124M155.96 24.37h21.3V3.07h-21.3v21.3"></path></svg>
|
||
|
</span>
|
||
|
</a></h1>
|
||
|
<ul class="list-unstyled navbar-sub-nav">
|
||
|
<li class="home"><a class="dashboard-shortcuts-projects" href="/explore" title="Projects">Projects
|
||
|
</a></li><li class=""><a class="dashboard-shortcuts-groups" href="/explore/groups" title="Groups">Groups
|
||
|
</a></li><li class=""><a class="dashboard-shortcuts-snippets" href="/explore/snippets" title="Snippets">Snippets
|
||
|
</a></li><li>
|
||
|
<a href="/help" title="About GitLab CE">Help</a>
|
||
|
</li>
|
||
|
</ul>
|
||
|
</div>
|
||
|
<div class="navbar-collapse collapse">
|
||
|
<ul class="nav navbar-nav">
|
||
|
<li class="nav-item d-none d-sm-none d-md-block m-auto">
|
||
|
<div class="search search-form">
|
||
|
<form accept-charset="UTF-8" action="/search" class="form-inline" method="get"><input name="utf8" type="hidden" value="✓"/><div class="search-input-container">
|
||
|
<div class="search-input-wrap">
|
||
|
<div class="dropdown" data-url="/search/autocomplete">
|
||
|
<input aria-label="Search" autocomplete="off" class="search-input dropdown-menu-toggle no-outline js-search-dashboard-options" data-issues-path="/dashboard/issues" data-mr-path="/dashboard/merge_requests" id="search" name="search" placeholder="Search" spellcheck="false" tabindex="1" type="search"/>
|
||
|
<button class="hidden js-dropdown-search-toggle" data-toggle="dropdown" type="button"></button>
|
||
|
<div class="dropdown-menu dropdown-select">
|
||
|
<div class="dropdown-content"><ul>
|
||
|
<li class="dropdown-menu-empty-item">
|
||
|
<a>
|
||
|
Loading...
|
||
|
</a>
|
||
|
</li>
|
||
|
</ul>
|
||
|
</div><div class="dropdown-loading"><i aria-hidden="true" class="fa fa-spinner fa-spin" data-hidden="true"></i></div>
|
||
|
</div>
|
||
|
<svg class="s16 search-icon"><use xlink:href="/assets/icons-07542808fffaf82e9b57b144464ea42620b32f65ce441c01528d23d4b96d5f11.svg#search"></use></svg>
|
||
|
<svg class="s16 clear-icon js-clear-input"><use xlink:href="/assets/icons-07542808fffaf82e9b57b144464ea42620b32f65ce441c01528d23d4b96d5f11.svg#close"></use></svg>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<input class="js-search-group-options" id="group_id" name="group_id" type="hidden"/>
|
||
|
<input class="js-search-project-options" id="search_project_id" name="project_id" type="hidden" value=""/>
|
||
|
<input id="repository_ref" name="repository_ref" type="hidden"/>
|
||
|
<div class="search-autocomplete-opts hide" data-autocomplete-path="/search/autocomplete"></div>
|
||
|
</form></div>
|
||
|
</li>
|
||
|
<li class="nav-item d-inline-block d-sm-none d-md-none">
|
||
|
<a aria-label="Search" data-container="body" data-placement="bottom" data-toggle="tooltip" href="/search" title="Search"><svg class="s16"><use xlink:href="/assets/icons-07542808fffaf82e9b57b144464ea42620b32f65ce441c01528d23d4b96d5f11.svg#search"></use></svg>
|
||
|
</a></li>
|
||
|
<li class="nav-item">
|
||
|
<div>
|
||
|
<a class="btn btn-sign-in" href="/users/sign_in?redirect_to_referer=yes">Sign in / Register</a>
|
||
|
</div>
|
||
|
</li>
|
||
|
</ul>
|
||
|
</div>
|
||
|
<button class="navbar-toggler d-block d-sm-none" type="button">
|
||
|
<span class="sr-only">Toggle navigation</span>
|
||
|
<svg class="s12 more-icon js-navbar-toggle-right"><use xlink:href="/assets/icons-07542808fffaf82e9b57b144464ea42620b32f65ce441c01528d23d4b96d5f11.svg#more"></use></svg>
|
||
|
<svg class="s12 close-icon js-navbar-toggle-left"><use xlink:href="/assets/icons-07542808fffaf82e9b57b144464ea42620b32f65ce441c01528d23d4b96d5f11.svg#close"></use></svg>
|
||
|
</button>
|
||
|
</div>
|
||
|
</div>
|
||
|
</header>
|
||
|
<div class="layout-page">
|
||
|
<div class="content-wrapper">
|
||
|
<div class="mobile-overlay"></div>
|
||
|
<div class="alert-wrapper">
|
||
|
<nav class="breadcrumbs container-fluid container-limited" role="navigation">
|
||
|
<div class="breadcrumbs-container">
|
||
|
<div class="breadcrumbs-links js-title-container">
|
||
|
<ul class="list-unstyled breadcrumbs-list js-breadcrumbs-list">
|
||
|
<li><a href="/help">Help</a><svg class="s8 breadcrumbs-list-angle"><use xlink:href="/assets/icons-07542808fffaf82e9b57b144464ea42620b32f65ce441c01528d23d4b96d5f11.svg#angle-right"></use></svg></li>
|
||
|
<li>
|
||
|
<h2 class="breadcrumbs-sub-title"><a href="/help/ci/quick_start/README.md">Help</a></h2>
|
||
|
</li>
|
||
|
</ul>
|
||
|
</div>
|
||
|
</div>
|
||
|
</nav>
|
||
|
<div class="flash-container flash-container-page">
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="container-fluid container-limited ">
|
||
|
<div class="content" id="content-body">
|
||
|
<div class="documentation wiki prepend-top-default">
|
||
|
<h1 dir="auto">
|
||
|
<a aria-hidden="true" class="anchor" href="#getting-started-with-gitlab-cicd" id="user-content-getting-started-with-gitlab-cicd"></a>Getting started with GitLab CI/CD</h1>
|
||
|
<blockquote dir="auto">
|
||
|
<p><strong>Note:</strong> Starting from version 8.0, GitLab <a href="https://about.gitlab.com/gitlab-ci/" rel="nofollow noreferrer noopener" target="_blank">Continuous Integration</a> (CI)
|
||
|
is fully integrated into GitLab itself and is <a href="/enable_or_disable_ci.md">enabled</a> by default on all
|
||
|
projects.</p>
|
||
|
</blockquote>
|
||
|
<p dir="auto">GitLab offers a <a href="https://about.gitlab.com/gitlab-ci/" rel="nofollow noreferrer noopener" target="_blank">continuous integration</a> service. If you
|
||
|
<a href="/yaml/README.md">add a <code>.gitlab-ci.yml</code> file</a> to the root directory of your repository,
|
||
|
and configure your GitLab project to use a <a href="/runners/README.md">Runner</a>, then each commit or
|
||
|
push, triggers your CI <a href="/pipelines.md">pipeline</a>.</p>
|
||
|
<p dir="auto">The <code>.gitlab-ci.yml</code> file tells the GitLab runner what to do. By default it runs
|
||
|
a pipeline with three <a href="../yaml/README.md#stages">stages</a>: <code>build</code>, <code>test</code>, and <code>deploy</code>. You don't need to
|
||
|
use all three stages; stages with no jobs are simply ignored.</p>
|
||
|
<p dir="auto">If everything runs OK (no non-zero return values), you'll get a nice green
|
||
|
checkmark associated with the commit. This makes it
|
||
|
easy to see whether a commit caused any of the tests to fail before
|
||
|
you even look at the code.</p>
|
||
|
<p dir="auto">Most projects use GitLab's CI service to run the test suite so that
|
||
|
developers get immediate feedback if they broke something.</p>
|
||
|
<p dir="auto">There's a growing trend to use continuous delivery and continuous deployment to
|
||
|
automatically deploy tested code to staging and production environments.</p>
|
||
|
<p dir="auto">So in brief, the steps needed to have a working CI can be summed up to:</p>
|
||
|
<ol dir="auto">
|
||
|
<li>Add <code>.gitlab-ci.yml</code> to the root directory of your repository</li>
|
||
|
<li>Configure a Runner</li>
|
||
|
</ol>
|
||
|
<p dir="auto">From there on, on every push to your Git repository, the Runner will
|
||
|
automagically start the pipeline and the pipeline will appear under the
|
||
|
project's <strong>Pipelines</strong> page.</p>
|
||
|
<hr/>
|
||
|
<p dir="auto">This guide assumes that you:</p>
|
||
|
<ul dir="auto">
|
||
|
<li>have a working GitLab instance of version 8.0+r or are using
|
||
|
<a href="https://gitlab.com" rel="nofollow noreferrer noopener" target="_blank">GitLab.com</a>
|
||
|
</li>
|
||
|
<li>have a project in GitLab that you would like to use CI for</li>
|
||
|
</ul>
|
||
|
<p dir="auto">Let's break it down to pieces and work on solving the GitLab CI puzzle.</p>
|
||
|
<h2 dir="auto">
|
||
|
<a aria-hidden="true" class="anchor" href="#creating-a-gitlab-ciyml-file" id="user-content-creating-a-gitlab-ciyml-file"></a>Creating a <code>.gitlab-ci.yml</code> file</h2>
|
||
|
<p dir="auto">Before you create <code>.gitlab-ci.yml</code> let's first explain in brief what this is
|
||
|
all about.</p>
|
||
|
<h3 dir="auto">
|
||
|
<a aria-hidden="true" class="anchor" href="#what-is-gitlab-ciyml" id="user-content-what-is-gitlab-ciyml"></a>What is <code>.gitlab-ci.yml</code>
|
||
|
</h3>
|
||
|
<p dir="auto">The <code>.gitlab-ci.yml</code> file is where you configure what CI does with your project.
|
||
|
It lives in the root of your repository.</p>
|
||
|
<p dir="auto">On any push to your repository, GitLab will look for the <code>.gitlab-ci.yml</code>
|
||
|
file and start jobs on <em>Runners</em> according to the contents of the file,
|
||
|
for that commit.</p>
|
||
|
<p dir="auto">Because <code>.gitlab-ci.yml</code> is in the repository and is version controlled, old
|
||
|
versions still build successfully, forks can easily make use of CI, branches can
|
||
|
have different pipelines and jobs, and you have a single source of truth for CI.
|
||
|
You can read more about the reasons why we are using <code>.gitlab-ci.yml</code> <a href="https://about.gitlab.com/2015/05/06/why-were-replacing-gitlab-ci-jobs-with-gitlab-ci-dot-yml/" rel="nofollow noreferrer noopener" target="_blank">in our
|
||
|
blog about it</a>.</p>
|
||
|
<h3 dir="auto">
|
||
|
<a aria-hidden="true" class="anchor" href="#creating-a-simple-gitlab-ciyml-file" id="user-content-creating-a-simple-gitlab-ciyml-file"></a>Creating a simple <code>.gitlab-ci.yml</code> file</h3>
|
||
|
<blockquote dir="auto">
|
||
|
<p><strong>Note:</strong>
|
||
|
<code>.gitlab-ci.yml</code> is a <a href="https://en.wikipedia.org/wiki/YAML" rel="nofollow noreferrer noopener" target="_blank">YAML</a> file
|
||
|
so you have to pay extra attention to indentation. Always use spaces, not tabs.</p>
|
||
|
</blockquote>
|
||
|
<p dir="auto">You need to create a file named <code>.gitlab-ci.yml</code> in the root directory of your
|
||
|
repository. Below is an example for a Ruby on Rails project.</p>
|
||
|
<pre class="code highlight js-syntax-highlight yaml" lang="yaml" v-pre="true"><code><span class="line" id="LC1" lang="yaml"><span class="na">before_script</span><span class="pi">:</span></span>
|
||
|
<span class="line" id="LC2" lang="yaml"> <span class="pi">-</span> <span class="s">apt-get update -qq && apt-get install -y -qq sqlite3 libsqlite3-dev nodejs</span></span>
|
||
|
<span class="line" id="LC3" lang="yaml"> <span class="pi">-</span> <span class="s">ruby -v</span></span>
|
||
|
<span class="line" id="LC4" lang="yaml"> <span class="pi">-</span> <span class="s">which ruby</span></span>
|
||
|
<span class="line" id="LC5" lang="yaml"> <span class="pi">-</span> <span class="s">gem install bundler --no-ri --no-rdoc</span></span>
|
||
|
<span class="line" id="LC6" lang="yaml"> <span class="pi">-</span> <span class="s">bundle install --jobs $(nproc) "${FLAGS[@]}"</span></span>
|
||
|
<span class="line" id="LC7" lang="yaml"></span>
|
||
|
<span class="line" id="LC8" lang="yaml"><span class="na">rspec</span><span class="pi">:</span></span>
|
||
|
<span class="line" id="LC9" lang="yaml"> <span class="na">script</span><span class="pi">:</span></span>
|
||
|
<span class="line" id="LC10" lang="yaml"> <span class="pi">-</span> <span class="s">bundle exec rspec</span></span>
|
||
|
<span class="line" id="LC11" lang="yaml"></span>
|
||
|
<span class="line" id="LC12" lang="yaml"><span class="na">rubocop</span><span class="pi">:</span></span>
|
||
|
<span class="line" id="LC13" lang="yaml"> <span class="na">script</span><span class="pi">:</span></span>
|
||
|
<span class="line" id="LC14" lang="yaml"> <span class="pi">-</span> <span class="s">bundle exec rubocop</span></span></code></pre>
|
||
|
<p dir="auto">This is the simplest possible configuration that will work for most Ruby
|
||
|
applications:</p>
|
||
|
<ol dir="auto">
|
||
|
<li>Define two jobs <code>rspec</code> and <code>rubocop</code> (the names are arbitrary) with
|
||
|
different commands to be executed.</li>
|
||
|
<li>Before every job, the commands defined by <code>before_script</code> are executed.</li>
|
||
|
</ol>
|
||
|
<p dir="auto">The <code>.gitlab-ci.yml</code> file defines sets of jobs with constraints of how and when
|
||
|
they should be run. The jobs are defined as top-level elements with a name (in
|
||
|
our case <code>rspec</code> and <code>rubocop</code>) and always have to contain the <code>script</code> keyword.
|
||
|
Jobs are used to create jobs, which are then picked by
|
||
|
<a href="/runners/README.md">Runners</a> and executed within the environment of the Runner.</p>
|
||
|
<p dir="auto">What is important is that each job is run independently from each other.</p>
|
||
|
<p dir="auto">If you want to check whether the <code>.gitlab-ci.yml</code> of your project is valid, there is a
|
||
|
Lint tool under the page <code>/ci/lint</code> of your project namespace. You can also find
|
||
|
a "CI Lint" button to go to this page under <strong>CI/CD ➔ Pipelines</strong> and
|
||
|
<strong>Pipelines ➔ Jobs</strong> in your project.</p>
|
||
|
<p dir="auto">For more information and a complete <code>.gitlab-ci.yml</code> syntax, please read
|
||
|
<a href="/yaml/README.md">the reference documentation on .gitlab-ci.yml</a>.</p>
|
||
|
<h3 dir="auto">
|
||
|
<a aria-hidden="true" class="anchor" href="#push-gitlab-ciyml-to-gitlab" id="user-content-push-gitlab-ciyml-to-gitlab"></a>Push <code>.gitlab-ci.yml</code> to GitLab</h3>
|
||
|
<p dir="auto">Once you've created <code>.gitlab-ci.yml</code>, you should add it to your Git repository
|
||
|
and push it to GitLab.</p>
|
||
|
<pre class="code highlight js-syntax-highlight shell" lang="shell" v-pre="true"><code><span class="line" id="LC1" lang="shell">git add .gitlab-ci.yml</span>
|
||
|
<span class="line" id="LC2" lang="shell">git commit <span class="nt">-m</span> <span class="s2">"Add .gitlab-ci.yml"</span></span>
|
||
|
<span class="line" id="LC3" lang="shell">git push origin master</span></code></pre>
|
||
|
<p dir="auto">Now if you go to the <strong>Pipelines</strong> page you will see that the pipeline is
|
||
|
pending.</p>
|
||
|
<p dir="auto">NOTE: <strong>Note:</strong>
|
||
|
If you have a <a href="https://docs.gitlab.com/ee/workflow/repository_mirroring.html#pulling-from-a-remote-repository" rel="nofollow noreferrer noopener" target="_blank">mirrored repository where GitLab pulls from</a>,
|
||
|
you may need to enable pipeline triggering in your project's
|
||
|
<strong>Settings > Repository > Pull from a remote repository > Trigger pipelines for mirror updates</strong>.</p>
|
||
|
<p dir="auto">You can also go to the <strong>Commits</strong> page and notice the little pause icon next
|
||
|
to the commit SHA.</p>
|
||
|
<p dir="auto"><a class="no-attachment-icon" href="/img/new_commit.png" rel="noopener noreferrer" target="_blank"><img alt="New commit pending" class="lazy" data-src="img/new_commit.png" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="/></a></p>
|
||
|
<p dir="auto">Clicking on it you will be directed to the jobs page for that specific commit.</p>
|
||
|
<p dir="auto"><a class="no-attachment-icon" href="/img/single_commit_status_pending.png" rel="noopener noreferrer" target="_blank"><img alt="Single commit jobs page" class="lazy" data-src="img/single_commit_status_pending.png" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="/></a></p>
|
||
|
<p dir="auto">Notice that there is a pending job which is named after what we wrote in
|
||
|
<code>.gitlab-ci.yml</code>. "stuck" indicates that there is no Runner configured
|
||
|
yet for this job.</p>
|
||
|
<p dir="auto">The next step is to configure a Runner so that it picks the pending jobs.</p>
|
||
|
<h2 dir="auto">
|
||
|
<a aria-hidden="true" class="anchor" href="#configuring-a-runner" id="user-content-configuring-a-runner"></a>Configuring a Runner</h2>
|
||
|
<p dir="auto">In GitLab, Runners run the jobs that you define in <code>.gitlab-ci.yml</code>. A Runner
|
||
|
can be a virtual machine, a VPS, a bare-metal machine, a docker container or
|
||
|
even a cluster of containers. GitLab and the Runners communicate through an API,
|
||
|
so the only requirement is that the Runner's machine has network access to the
|
||
|
GitLab server.</p>
|
||
|
<p dir="auto">A Runner can be specific to a certain project or serve multiple projects in
|
||
|
GitLab. If it serves all projects it's called a <em>Shared Runner</em>.</p>
|
||
|
<p dir="auto">Find more information about different Runners in the
|
||
|
<a href="/runners/README.md">Runners</a> documentation.</p>
|
||
|
<p dir="auto">You can find whether any Runners are assigned to your project by going to
|
||
|
<strong>Settings ➔ CI/CD</strong>. Setting up a Runner is easy and straightforward. The
|
||
|
official Runner supported by GitLab is written in Go and its documentation
|
||
|
can be found at <a href="https://docs.gitlab.com/runner/" rel="nofollow noreferrer noopener" target="_blank">https://docs.gitlab.com/runner/</a>.</p>
|
||
|
<p dir="auto">In order to have a functional Runner you need to follow two steps:</p>
|
||
|
<ol dir="auto">
|
||
|
<li><a href="https://docs.gitlab.com/runner/install/" rel="nofollow noreferrer noopener" target="_blank">Install it</a></li>
|
||
|
<li><a href="../runners/README.md#registering-a-specific-runner">Configure it</a></li>
|
||
|
</ol>
|
||
|
<p dir="auto">Follow the links above to set up your own Runner or use a Shared Runner as
|
||
|
described in the next section.</p>
|
||
|
<p dir="auto">Once the Runner has been set up, you should see it on the Runners page of your
|
||
|
project, following <strong>Settings ➔ CI/CD</strong>.</p>
|
||
|
<p dir="auto"><a class="no-attachment-icon" href="/img/runners_activated.png" rel="noopener noreferrer" target="_blank"><img alt="Activated runners" class="lazy" data-src="img/runners_activated.png" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="/></a></p>
|
||
|
<h3 dir="auto">
|
||
|
<a aria-hidden="true" class="anchor" href="#shared-runners" id="user-content-shared-runners"></a>Shared Runners</h3>
|
||
|
<p dir="auto">If you use <a href="https://gitlab.com/" rel="nofollow noreferrer noopener" target="_blank">GitLab.com</a> you can use the <strong>Shared Runners</strong>
|
||
|
provided by GitLab Inc.</p>
|
||
|
<p dir="auto">These are special virtual machines that run on GitLab's infrastructure and can
|
||
|
build any project.</p>
|
||
|
<p dir="auto">To enable the <strong>Shared Runners</strong> you have to go to your project's
|
||
|
<strong>Settings ➔ CI/CD</strong> and click <strong>Enable shared runners</strong>.</p>
|
||
|
<p dir="auto"><a href="/runners/README.md">Read more on Shared Runners</a>.</p>
|
||
|
<h2 dir="auto">
|
||
|
<a aria-hidden="true" class="anchor" href="#seeing-the-status-of-your-pipeline-and-jobs" id="user-content-seeing-the-status-of-your-pipeline-and-jobs"></a>Seeing the status of your pipeline and jobs</h2>
|
||
|
<p dir="auto">After configuring the Runner successfully, you should see the status of your
|
||
|
last commit change from <em>pending</em> to either <em>running</em>, <em>success</em> or <em>failed</em>.</p>
|
||
|
<p dir="auto">You can view all pipelines by going to the <strong>Pipelines</strong> page in your project.</p>
|
||
|
<p dir="auto"><a class="no-attachment-icon" href="/img/pipelines_status.png" rel="noopener noreferrer" target="_blank"><img alt="Commit status" class="lazy" data-src="img/pipelines_status.png" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="/></a></p>
|
||
|
<p dir="auto">Or you can view all jobs, by going to the <strong>Pipelines ➔ Jobs</strong> page.</p>
|
||
|
<p dir="auto"><a class="no-attachment-icon" href="/img/builds_status.png" rel="noopener noreferrer" target="_blank"><img alt="Commit status" class="lazy" data-src="img/builds_status.png" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="/></a></p>
|
||
|
<p dir="auto">By clicking on a job's status, you will be able to see the log of that job.
|
||
|
This is important to diagnose why a job failed or acted differently than
|
||
|
you expected.</p>
|
||
|
<p dir="auto"><a class="no-attachment-icon" href="/img/build_log.png" rel="noopener noreferrer" target="_blank"><img alt="Build log" class="lazy" data-src="img/build_log.png" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="/></a></p>
|
||
|
<p dir="auto">You are also able to view the status of any commit in the various pages in
|
||
|
GitLab, such as <strong>Commits</strong> and <strong>Merge requests</strong>.</p>
|
||
|
<h2 dir="auto">
|
||
|
<a aria-hidden="true" class="anchor" href="#examples" id="user-content-examples"></a>Examples</h2>
|
||
|
<p dir="auto">Visit the <a href="/examples/README.md">examples README</a> to see a list of examples using GitLab
|
||
|
CI with various languages.</p>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</body>
|
||
|
</html>
|