-
Notifications
You must be signed in to change notification settings - Fork 153
/
Copy pathindex.lit
201 lines (164 loc) · 6.65 KB
/
index.lit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
\title{Concourse}{index}
\use-plugin{concourse-docs}
\styled{index}
\splash-intro{
\inline-header{Concourse is an open-source continuous thing-doer.}
Built on the simple mechanics of \reference{resources}{resources},
\reference{tasks}{tasks}, and \reference{jobs}{jobs}, Concourse presents a
general approach to automation that makes it great for
\link{CI}{https://en.wikipedia.org/wiki/Continuous_integration}/\link{CD}{https://en.wikipedia.org/wiki/Continuous_delivery}.
\button{\reference{quick-start}}
}{
\download-links
}
\page-region{light}{Built in the open}{
Concourse's \link{RFC process}{https://github.com/concourse/rfcs} and
\link{governance model}{https://github.com/concourse/governance} invite
anyone to become a contributor, developing the project roadmap by
collaborating in the open.
\rfcs-table{10}{ByTotalReactions}
Help shape Concourse into a tool that fits your needs by \link{submitting
feedback}{https://github.com/concourse/rfcs/#reviewing-rfcs} on the RFCs
listed above!
}
\page-region{light}{Key features}{
Concourse is designed to be \link{expressive, versatile, and
safe}{https://github.com/concourse/rfcs/blob/master/DESIGN_PRINCIPLES.md},
remaining intuitive as the complexity of your project grows.
\side-by-side{
\inline-header{Configure as code}
\codeblock{yaml}{{{
resources:
- name: booklit
type: git
source: {uri: "https://github.com/concourse/booklit"}
jobs:
- name: unit
plan:
- get: booklit
trigger: true
- task: test
file: booklit/ci/test.yml
}}}
}{
\inline-header{Visualize to verify}
\include-template{basic-pipeline-svg}
}
\side-by-side{
A Concourse \reference{pipelines}{pipeline} is like a distributed, continuous
\code{Makefile}.
Each \reference{jobs}{job} has a \reference{schema.job.plan}{build plan}
declaring the job's input \reference{resources}{resources} and what to run
with them when they change.
}{
Your pipeline is then visualized in the web UI, taking only one click to get
from a failed job to seeing why it failed.
The visualization provides a "gut check" feedback loop: if it \italic{looks}
wrong, it probably \italic{is} wrong.
}
\inline-header{A more complicated example...}
Jobs can depend on other jobs by configuring
\reference{schema.get.passed}{\code{passed}} constraints. The resulting chain
of jobs and resources is a dependency graph that continuously pushes your
project forward, from source code to production.
\include-template{pipeline-image}
\italic{This particular pipeline can be found in the \link{Booklit
repository}{https://github.com/concourse/booklit/blob/8741a4ca3116dcf24c30fedfa78e4aadcaff178a/ci/pipeline.yml}.}
\splash-example{CI under source control}{
All configuration and administration is done using \reference{fly-cli}{the
\code{fly} CLI}.
The \reference{fly-set-pipeline} command pushes the config up to Concourse.
Once it looks good, you can then check the file in to source control. This
makes it easy to recover your project if the Concourse server burns down.
}{
\codeblock{sh}{{{
$ fly -t ci set-pipeline -p booklit -c pipeline.yml
$ vim pipeline.yml
$ fly -t ci set-pipeline -p booklit -c pipeline.yml
$ git add pipeline.yml
$ git commit -m "initial pipeline"█
}}}
}
\splash-example{Reproducible, debuggable builds}{
Everything runs in containers, ensuring a clean environment on every run.
Each \reference{tasks}{task} specifies its own image, giving it full control
over its dependencies, rather than managing packages and state on your
workers.
The \reference{fly-intercept} command will pop you right into one of your
build's containers, making it easy to troubleshoot flaky builds.
}{
\codeblock{sh}{{{
$ fly -t ci intercept -j booklit/unit -s unit
root@2c15ff11:/tmp/build/0df9eea0# ps
PID TTY TIME CMD
171 pts/1 00:00:00 bash
1876 pts/1 00:00:00 ps
root@2c15ff11:/tmp/build/0df9eea0# ls
depspath gopath
root@2c15ff11:/tmp/build/0df9eea0# █
}}}
}
\splash-example{Rapid local iteration}{
The \reference{fly-execute} command lets you run a build with local changes.
This build runs in exactly the same way as it would run in your pipeline,
without having to push broken commits until it works.
When a build in the pipeline fails, you can run \reference{fly-execute} with
the \code{-j} flag to run a one-off build with the same inputs as the failed
build. You can then replace an input with your local changes with \code{-i}
to see if your fix is valid.
}{
\codeblock{sh}{{{
~/booklit $ fly -t ci execute -c ci/test.yml
executing build 1 at http://localhost:8080/builds/1
initializing
booklit: 4.74 MiB/s 0s
running gopath/src/github.com/concourse/booklit/ci/test
fetching dependencies...
installing ginkgo...
running tests...
█
}}}
}
\inline-header{Bring your own integrations}
\side-by-side{
\codeblock{yaml}{{{
resource_types:
- name: rubygem
type: registry-image
source:
repository: troykinsella/concourse-rubygems-resource
resources:
- name: rspec-gem
type: rubygem
source: {gem: rspec}
jobs:
- name: bundle
plan:
- get: rspec-gem
trigger: true
- # ...
}}}
}{
Concourse does not have a complex plugin system. Instead, it focuses on a
single strong abstraction: \reference{resources}{resource}, which are
implemented by \reference{resource-types}{resource types}.
The \reference{schema.pipeline.resources} field configures external artifacts
that your pipeline will monitor for changes, fetch from, and push to.
For example, a resource with type \code{git} refers to a git repository,
which will be \code{clone}d in a \reference{get-step} and \code{push}ed to
using a \reference{put-step}. Behind the scenes, Concourse will continuously
run \code{git fetch} to look for new commits that jobs may want to trigger
on.
At its core, Concourse knows nothing about \code{git}. It comes with a
\link{\code{git} resource type}{https://github.com/concourse/git-resource}
out of the box, but you could just as easily bring your own into your
pipeline by setting the \reference{schema.pipeline.resource_types} field.
To see what resource types are available, check out the \link{Resource Types
catalog}{https://resource-types.concourse-ci.org}!
}
}
\split-sections
\include-section{./docs.lit}
\include-section{./examples.lit}
\include-section{./project.lit}
\include-section{./ecosystem.lit}