README.md 8,7 КБ
Newer Older
Marcia Ramos's avatar
Marcia Ramos включено в состав коммита
1
2
3
4
---
type: reference
---

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
5
# Getting started with GitLab CI/CD
Douwe Maan's avatar
Douwe Maan включено в состав коммита
6

Cindy Pallares 🦉's avatar
Cindy Pallares 🦉 включено в состав коммита
7
8
NOTE: **Note:**
Starting from version 8.0, GitLab [Continuous Integration][ci] (CI)
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
9
10
is fully integrated into GitLab itself and is [enabled] by default on all
projects.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
11

Cindy Pallares 🦉's avatar
Cindy Pallares 🦉 включено в состав коммита
12
13
14
15
NOTE: **Note:**
Please keep in mind that only project Maintainers and Admin users have
the permissions to access a project's settings.

Jason Lenny's avatar
Jason Lenny включено в состав коммита
16
17
18
19
NOTE: **Note:**
Coming over to GitLab from Jenkins? Check out our [reference](../jenkins/index.md)
for converting your pre-existing pipelines over to our format.

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
20
21
GitLab offers a [continuous integration][ci] service. If you
[add a `.gitlab-ci.yml` file][yaml] to the root directory of your repository,
Alex Karnovsky's avatar
Alex Karnovsky включено в состав коммита
22
and configure your GitLab project to use a [Runner], then each commit or
kus's avatar
kus включено в состав коммита
23
push triggers your CI [pipeline].
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
24

Mark Pundsack's avatar
Mark Pundsack включено в состав коммита
25
26
27
The `.gitlab-ci.yml` file tells the GitLab runner what to do. By default it runs
a pipeline with three [stages]: `build`, `test`, and `deploy`. You don't need to
use all three stages; stages with no jobs are simply ignored.
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
28
29

If everything runs OK (no non-zero return values), you'll get a nice green
Alex Karnovsky's avatar
Alex Karnovsky включено в состав коммита
30
31
checkmark associated with the commit. This makes it
easy to see whether a commit caused any of the tests to fail before
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
32
33
you even look at the code.

Mark Pundsack's avatar
Mark Pundsack включено в состав коммита
34
Most projects use GitLab's CI service to run the test suite so that
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
35
developers get immediate feedback if they broke something.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
36

Mark Pundsack's avatar
Mark Pundsack включено в состав коммита
37
38
39
There's a growing trend to use continuous delivery and continuous deployment to
automatically deploy tested code to staging and production environments.

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
40
So in brief, the steps needed to have a working CI can be summed up to:
Douwe Maan's avatar
Douwe Maan включено в состав коммита
41

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
42
1. Add `.gitlab-ci.yml` to the root directory of your repository
Job van der Voort's avatar
Job van der Voort включено в состав коммита
43
1. Configure a Runner
Douwe Maan's avatar
Douwe Maan включено в состав коммита
44

Mark Pundsack's avatar
Mark Pundsack включено в состав коммита
45
46
From there on, on every push to your Git repository, the Runner will
automagically start the pipeline and the pipeline will appear under the
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
47
project's **Pipelines** page.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
48

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
49
50
---

Marcia Ramos's avatar
Marcia Ramos включено в состав коммита
51
This guide assumes that you have:
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
52

Marcia Ramos's avatar
Marcia Ramos включено в состав коммита
53
54
55
- A working GitLab instance of version 8.0+r or are using
  [GitLab.com](https://gitlab.com).
- A project in GitLab that you would like to use CI for.
Cindy Pallares 🦉's avatar
Cindy Pallares 🦉 включено в состав коммита
56
- Maintainer or owner access to the project
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
57
58

Let's break it down to pieces and work on solving the GitLab CI puzzle.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
59

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
60
## Creating a `.gitlab-ci.yml` file
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
61

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
62
63
Before you create `.gitlab-ci.yml` let's first explain in brief what this is
all about.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
64

Job van der Voort's avatar
Job van der Voort включено в состав коммита
65
### What is `.gitlab-ci.yml`
Douwe Maan's avatar
Douwe Maan включено в состав коммита
66

Job van der Voort's avatar
Job van der Voort включено в состав коммита
67
68
The `.gitlab-ci.yml` file is where you configure what CI does with your project.
It lives in the root of your repository.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
69

Job van der Voort's avatar
Job van der Voort включено в состав коммита
70
On any push to your repository, GitLab will look for the `.gitlab-ci.yml`
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
71
file and start jobs on _Runners_ according to the contents of the file,
Job van der Voort's avatar
Job van der Voort включено в состав коммита
72
for that commit.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
73

Mark Pundsack's avatar
Mark Pundsack включено в состав коммита
74
75
76
77
78
Because `.gitlab-ci.yml` 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 `.gitlab-ci.yml` [in our
blog about it][blog-ci].
Job van der Voort's avatar
Job van der Voort включено в состав коммита
79
80
81

### Creating a simple `.gitlab-ci.yml` file

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
82
83
84
85
>**Note:**
`.gitlab-ci.yml` is a [YAML](https://en.wikipedia.org/wiki/YAML) file
so you have to pay extra attention to indentation. Always use spaces, not tabs.

Job van der Voort's avatar
Job van der Voort включено в состав коммита
86
87
You need to create a file named `.gitlab-ci.yml` in the root directory of your
repository. Below is an example for a Ruby on Rails project.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
88
89

```yaml
Cindy Pallares 🦉's avatar
Cindy Pallares 🦉 включено в состав коммита
90
91
image: "ruby:2.5"

Douwe Maan's avatar
Douwe Maan включено в состав коммита
92
before_script:
Job van der Voort's avatar
Job van der Voort включено в состав коммита
93
94
95
  - apt-get update -qq && apt-get install -y -qq sqlite3 libsqlite3-dev nodejs
  - ruby -v
  - which ruby
96
  - gem install bundler --no-document
Job van der Voort's avatar
Job van der Voort включено в состав коммита
97
  - bundle install --jobs $(nproc)  "${FLAGS[@]}"
Douwe Maan's avatar
Douwe Maan включено в состав коммита
98
99
100
101
102
103
104
105
106
107

rspec:
  script:
    - bundle exec rspec

rubocop:
  script:
    - bundle exec rubocop
```

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
108
This is the simplest possible configuration that will work for most Ruby
Job van der Voort's avatar
Job van der Voort включено в состав коммита
109
110
applications:

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
111
112
1. Define two jobs `rspec` and `rubocop` (the names are arbitrary) with
   different commands to be executed.
Job van der Voort's avatar
Job van der Voort включено в состав коммита
113
114
115
1. Before every job, the commands defined by `before_script` are executed.

The `.gitlab-ci.yml` file defines sets of jobs with constraints of how and when
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
116
117
they should be run. The jobs are defined as top-level elements with a name (in
our case `rspec` and `rubocop`) and always have to contain the `script` keyword.
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
118
Jobs are used to create jobs, which are then picked by
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
119
[Runners](../runners/README.md) and executed within the environment of the Runner.
Job van der Voort's avatar
Job van der Voort включено в состав коммита
120
121

What is important is that each job is run independently from each other.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
122

Mayra Cabrera's avatar
Mayra Cabrera включено в состав коммита
123
If you want to check whether the `.gitlab-ci.yml` of your project is valid, there is a
Damian Nowak's avatar
Damian Nowak включено в состав коммита
124
Lint tool under the page `/-/ci/lint` of your project namespace. You can also find
bikebilly's avatar
bikebilly включено в состав коммита
125
a "CI Lint" button to go to this page under **CI/CD ➔ Pipelines** and
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
126
**Pipelines ➔ Jobs** in your project.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
127

Mark Pundsack's avatar
Mark Pundsack включено в состав коммита
128
For more information and a complete `.gitlab-ci.yml` syntax, please read
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
129
[the reference documentation on .gitlab-ci.yml](../yaml/README.md).
Douwe Maan's avatar
Douwe Maan включено в состав коммита
130

Job van der Voort's avatar
Job van der Voort включено в состав коммита
131
### Push `.gitlab-ci.yml` to GitLab
Douwe Maan's avatar
Douwe Maan включено в состав коммита
132

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
133
Once you've created `.gitlab-ci.yml`, you should add it to your Git repository
Job van der Voort's avatar
Job van der Voort включено в состав коммита
134
and push it to GitLab.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
135
136
137

```bash
git add .gitlab-ci.yml
Job van der Voort's avatar
Job van der Voort включено в состав коммита
138
git commit -m "Add .gitlab-ci.yml"
Douwe Maan's avatar
Douwe Maan включено в состав коммита
139
140
141
git push origin master
```

Mark Pundsack's avatar
Mark Pundsack включено в состав коммита
142
143
Now if you go to the **Pipelines** page you will see that the pipeline is
pending.
Job van der Voort's avatar
Job van der Voort включено в состав коммита
144

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
145
NOTE: **Note:**
Marcel Amirault's avatar
Marcel Amirault включено в состав коммита
146
If you have a [mirrored repository where GitLab pulls from](../../workflow/repository_mirroring.md#pulling-from-a-remote-repository-starter),
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
147
148
149
you may need to enable pipeline triggering in your project's
**Settings > Repository > Pull from a remote repository > Trigger pipelines for mirror updates**.

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
150
You can also go to the **Commits** page and notice the little pause icon next
Job van der Voort's avatar
Job van der Voort включено в состав коммита
151
152
153
154
to the commit SHA.

![New commit pending](img/new_commit.png)

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
155
Clicking on it you will be directed to the jobs page for that specific commit.
Job van der Voort's avatar
Job van der Voort включено в состав коммита
156

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
157
![Single commit jobs page](img/single_commit_status_pending.png)
Job van der Voort's avatar
Job van der Voort включено в состав коммита
158

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
159
160
161
Notice that there is a pending job which is named after what we wrote in
`.gitlab-ci.yml`. "stuck" indicates that there is no Runner configured
yet for this job.
Job van der Voort's avatar
Job van der Voort включено в состав коммита
162

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
163
The next step is to configure a Runner so that it picks the pending jobs.
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
164

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
165
## Configuring a Runner
Job van der Voort's avatar
Job van der Voort включено в состав коммита
166

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
167
In GitLab, Runners run the jobs that you define in `.gitlab-ci.yml`. A Runner
Mark Pundsack's avatar
Mark Pundsack включено в состав коммита
168
169
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,
Ben Bodenmiller's avatar
Ben Bodenmiller включено в состав коммита
170
171
so the only requirement is that the Runner's machine has network access to the
GitLab server.
Job van der Voort's avatar
Job van der Voort включено в состав коммита
172
173
174
175
176
177
178
179

A Runner can be specific to a certain project or serve multiple projects in
GitLab. If it serves all projects it's called a _Shared Runner_.

Find more information about different Runners in the
[Runners](../runners/README.md) documentation.

You can find whether any Runners are assigned to your project by going to
bikebilly's avatar
bikebilly включено в состав коммита
180
**Settings ➔ CI/CD**. Setting up a Runner is easy and straightforward. The
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
181
182
official Runner supported by GitLab is written in Go and its documentation
can be found at <https://docs.gitlab.com/runner/>.
Job van der Voort's avatar
Job van der Voort включено в состав коммита
183

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
184
In order to have a functional Runner you need to follow two steps:
Job van der Voort's avatar
Job van der Voort включено в состав коммита
185
186

1. [Install it][runner-install]
Evan Read's avatar
Evan Read включено в состав коммита
187
1. [Configure it](../runners/README.md#registering-a-specific-runner)
Job van der Voort's avatar
Job van der Voort включено в состав коммита
188

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
189
190
191
Follow the links above to set up your own Runner or use a Shared Runner as
described in the next section.

Job van der Voort's avatar
Job van der Voort включено в состав коммита
192
Once the Runner has been set up, you should see it on the Runners page of your
bikebilly's avatar
bikebilly включено в состав коммита
193
project, following **Settings ➔ CI/CD**.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
194

Job van der Voort's avatar
Job van der Voort включено в состав коммита
195
![Activated runners](img/runners_activated.png)
Douwe Maan's avatar
Douwe Maan включено в состав коммита
196

Job van der Voort's avatar
Job van der Voort включено в состав коммита
197
### Shared Runners
Douwe Maan's avatar
Douwe Maan включено в состав коммита
198

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
199
If you use [GitLab.com](https://gitlab.com/) you can use the **Shared Runners**
Job van der Voort's avatar
Job van der Voort включено в состав коммита
200
provided by GitLab Inc.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
201

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
202
203
These are special virtual machines that run on GitLab's infrastructure and can
build any project.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
204

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
205
To enable the **Shared Runners** you have to go to your project's
bikebilly's avatar
bikebilly включено в состав коммита
206
**Settings ➔ CI/CD** and click **Enable shared runners**.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
207

Job van der Voort's avatar
Job van der Voort включено в состав коммита
208
[Read more on Shared Runners](../runners/README.md).
Douwe Maan's avatar
Douwe Maan включено в состав коммита
209

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
210
## Seeing the status of your pipeline and jobs
Douwe Maan's avatar
Douwe Maan включено в состав коммита
211

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
212
After configuring the Runner successfully, you should see the status of your
Job van der Voort's avatar
Job van der Voort включено в состав коммита
213
last commit change from _pending_ to either _running_, _success_ or _failed_.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
214

Mark Pundsack's avatar
Mark Pundsack включено в состав коммита
215
216
217
218
You can view all pipelines by going to the **Pipelines** page in your project.

![Commit status](img/pipelines_status.png)

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
219
Or you can view all jobs, by going to the **Pipelines ➔ Jobs** page.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
220

Job van der Voort's avatar
Job van der Voort включено в состав коммита
221
![Commit status](img/builds_status.png)
Douwe Maan's avatar
Douwe Maan включено в состав коммита
222

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
223
224
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
Job van der Voort's avatar
Job van der Voort включено в состав коммита
225
you expected.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
226

Job van der Voort's avatar
Job van der Voort включено в состав коммита
227
![Build log](img/build_log.png)
Douwe Maan's avatar
Douwe Maan включено в состав коммита
228

Job van der Voort's avatar
Job van der Voort включено в состав коммита
229
You are also able to view the status of any commit in the various pages in
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
230
GitLab, such as **Commits** and **Merge requests**.
Douwe Maan's avatar
Douwe Maan включено в состав коммита
231

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
232
233
234
235
236
## Examples

Visit the [examples README][examples] to see a list of examples using GitLab
CI with various languages.

Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
237
[runner-install]: https://docs.gitlab.com/runner/install/
Job van der Voort's avatar
Job van der Voort включено в состав коммита
238
[blog-ci]: https://about.gitlab.com/2015/05/06/why-were-replacing-gitlab-ci-jobs-with-gitlab-ci-dot-yml/
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
239
[examples]: ../examples/README.md
Marcel Amirault's avatar
Marcel Amirault включено в состав коммита
240
[ci]: https://about.gitlab.com/product/continuous-integration/
Achilleas Pipinellis's avatar
Achilleas Pipinellis включено в состав коммита
241
242
243
244
[yaml]: ../yaml/README.md
[runner]: ../runners/README.md
[enabled]: ../enable_or_disable_ci.md
[stages]: ../yaml/README.md#stages
Mark Pundsack's avatar
Mark Pundsack включено в состав коммита
245
[pipeline]: ../pipelines.md