OSDN Git Service

adds SSL configurations.
[metasearch/grid-chef-repo.git] / cookbooks / concourse-ci / README.md
1 concourse-ci Cookbook
2 =====================
3
4 This cookbook sets up a Concourse CI service by Docker Compose.
5
6 ## Contents
7
8 - [Requirements](#requirements)
9     - [platforms](#platforms)
10     - [packages](#packages)
11     - [cookbooks](#cookbooks)
12 - [Attributes](#attributes)
13 - [Usage](#usage)
14     - [Recipes](#recipes)
15         - [concourse-ci::default](#concourse-cidefault)
16         - [concourse-ci::docker-compose](#concourse-cidocker-compose)
17     - [Role Examples](#role-examples)
18     - [SSL server keys and certificates management by ssl_cert cookbook](#ssl-server-keys-and-certificates-management-by-ssl_cert-cookbook)
19 - [License and Authors](#license-and-authors)
20
21 ## Requirements
22
23 ### platforms
24 - none.
25
26 ### packages
27 - none.
28
29 ### cookbooks
30 - `docker-grid`
31 - `ssl_cert`
32
33 ## Attributes
34
35 |Key|Type|Description, example|Default|
36 |:--|:--|:--|:--|
37 |`['concourse-ci']['docker-compose']['app_dir']`|String||`"#{node['docker-grid']['compose']['app_dir']}/concourse"`|
38 |`['concourse-ci']['docker-compose']['pgdata_dir']`|String|Path string or nil (unset).|`"#{node['concourse-ci']['docker-compose']['app_dir']}/database"`|
39 |`['concourse-ci']['docker-compose']['web_keys_dir']`|String|Path string.|`"#{node['concourse-ci']['docker-compose']['app_dir']}/keys/web"`|
40 |`['concourse-ci']['docker-compose']['worker_keys_dir']`|String|Path string.|`"#{node['concourse-ci']['docker-compose']['app_dir']}/keys/worker"`|
41 |`['concourse-ci']['docker-compose']['pgdata_dir']`|String|Path string or nil (unset, non-persistent).|`"#{node['concourse-ci']['docker-compose']['app_dir']}/database"`|
42 |`['concourse-ci']['docker-compose']['db_password_reset']`|String|Only available if the password is automatically generated by Chef.|`false`|
43 |`['concourse-ci']['docker-compose']['db_password_vault_item']`|Hash|See `attributes/default.rb`|`{}`|
44 |`['concourse-ci']['docker-compose']['web_password_reset']`|String|Only available if the password is automatically generated by Chef.|`false`|
45 |`['concourse-ci']['docker-compose']['web_password_vault_item']`|Hash|See `attributes/default.rb`|`{}`|
46 |`['concourse-ci']['docker-compose']['ssh_keys_reset']`|String|Resets all SSH keys forcely.|`false`|
47 |`['concourse-ci']['docker-compose']['config_format_version']`|String|Read only. `docker-compose.yml` format version. Only version 1 is supported now.|`'1'`|
48 |`['concourse-ci']['docker-compose']['config']`|Hash|`docker-compose.yml` configurations.|See `attributes/default.rb`|
49
50 ## Usage
51
52 ### Recipes
53
54 #### concourse-ci::default
55
56 This recipe does nothing.
57
58 #### concourse-ci::docker-compose
59
60 This recipe generates SSH keys of each node and a `docker-compose.yml` file for the Concourse CI service.
61
62 ### Role Examples
63
64 - `roles/concourse.rb`
65
66 ```ruby
67 name 'concourse'
68 description 'Concourse'
69
70 run_list(
71   'role[docker]',
72   'recipe[concourse-ci::docker-compose]',
73 )
74
75 image = 'concourse/concourse:2.6.0'
76 port = '18080'
77
78 override_attributes(
79   'concourse-ci' => {
80     'docker-compose' => {
81       'config' => {
82         # Version 1 docker-compose format
83         'concourse-web' => {
84           'image' => image,
85           'ports' => [
86             "#{port}:8080",
87           ],
88           'environment' => {
89             'CONCOURSE_EXTERNAL_URL' => "http://192.168.1.3:#{port}",
90           },
91         },
92         'concourse-worker' => {
93           'image' => image,
94         },
95       },
96     },
97   },
98 )
99 ```
100
101 - `roles/concourse-with-ssl.rb`
102
103 ```ruby
104 name 'concourse-with-ssl'
105 description 'Concourse with SSL'
106
107 run_list(
108   'recipe[ssl_cert::server_key_pairs]',
109   'role[docker]',
110   'recipe[concourse-ci::docker-compose]',
111 )
112
113 image = 'concourse/concourse:2.6.0'
114 port = '18443'
115 cn = 'concourse.io.example.com'
116
117 override_attributes(
118   'ssl_cert' => {
119     'common_names' => [
120       cn,
121     ],
122   },
123   'concourse-ci' => {
124     'with_ssl_cert_cookbook' => true,
125     'ssl_cert' => {
126       'common_name' => cn,
127     },
128     'docker-compose' => {
129       'config' => {
130         # Version 1 docker-compose format
131         'concourse-web' => {
132           'image' => image,
133           'ports' => [
134             "#{port}:8443",
135           ],
136           'environment' => {
137             'CONCOURSE_EXTERNAL_URL' => "https://192.168.1.3:#{port}",
138             'CONCOURSE_TLS_BIND_PORT' => '8443',  # activate HTTPS
139             # These environments will be set by the concourse-ci::docker-compose recipe automatically.
140             #'CONCOURSE_TLS_CERT' => '/root/server.crt',
141             #'CONCOURSE_TLS_KEY' => '/root/server.key',
142           },
143           'volumes' => [
144             # These volumes will be set by the concourse-ci::docker-compose recipe automatically.
145             #"#{server_cert_path(node['concourse-ci']['ssl_cert']['common_name'])}:/root/server.crt:ro",
146             #"#{server_key_path(node['concourse-ci']['ssl_cert']['common_name'])}:/root/server.key:ro",
147           ],
148         },
149         'concourse-worker' => {
150           'image' => image,
151         },
152       },
153     },
154   },
155 )
156 ```
157
158 ### SSL server keys and certificates management by ssl_cert cookbook
159
160 - create vault items.
161
162 ```text
163 $ ruby -rjson -e 'puts JSON.generate({"private" => File.read("concourse_io_example_com.prod.key")})' \
164 > > ~/tmp/concourse_io_example_com.prod.key.json
165
166 $ knife vault create ssl_server_keys concourse.io.example.com.prod \
167 > --json ~/tmp/concourse_io_example_com.prod.key.json
168
169 $ ruby -rjson -e 'puts JSON.generate({"public" => File.read("concourse_io_example_com.prod.crt")})' \
170 > > ~/tmp/concourse_io_example_com.prod.crt.json
171
172 $ knife vault create ssl_server_certs concourse.io.example.com.prod \
173 > --json ~/tmp/concourse_io_example_com.prod.crt.json
174 ```
175
176 - grant reference permission to the Concourse host
177
178 ```text
179 $ knife vault update ssl_server_keys  concourse.io.example.com.prod -S 'name:concourse-host.example.com'
180 $ knife vault update ssl_server_certs concourse.io.example.com.prod -S 'name:concourse-host.example.com'
181 ```
182
183 - modify run_list and attributes
184
185 ```ruby
186 run_list(
187   'recipe[ssl_cert::server_key_pairs]',
188   'recipe[concourse-ci::docker-compose]',
189 )
190
191 override_attributes(
192   'ssl_cert' => {
193     'common_names' => [
194       'concourse.io.example.com',
195     ],
196   },
197   'concourse-ci' => {
198     'with_ssl_cert_cookbook' => true,
199     'ssl_cert' => {
200       'common_name' => 'concourse.io.example.com',
201     },
202     # ...
203   },
204 )
205 ```
206
207 ## License and Authors
208
209 - Author:: whitestar at osdn.jp
210
211 ```text
212 Copyright 2017, whitestar
213
214 Licensed under the Apache License, Version 2.0 (the "License");
215 you may not use this file except in compliance with the License.
216 You may obtain a copy of the License at
217
218     http://www.apache.org/licenses/LICENSE-2.0
219
220 Unless required by applicable law or agreed to in writing, software
221 distributed under the License is distributed on an "AS IS" BASIS,
222 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
223 See the License for the specific language governing permissions and
224 limitations under the License.
225 ```