GCEのmicroプランだとメモリが500MB弱しかなく、Jenkinsを常駐させるのはちょっとアレなので、乗り換え先を探していたところ、Concourse CIというパイプラインベース、かつ、コマンドラインから操作出来てymlで管理出来る、そしてGoで書かれていて軽量、さらに、コマンドラインから操作出来る(2回言った)というCIツールがよさそうだったのでいれてみたメモ

コンテナ作成

公式から、Dockerイメージとdocker-compose.ymlが提供されているので、それを使います

yml見て知ったけど、postgresベースぽい

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
version: '3'

services:
concourse-db:
image: postgres:9.6
environment:
POSTGRES_DB: concourse
POSTGRES_USER: concourse // ←※postgresのユーザ名
POSTGRES_PASSWORD: changeme // ←※postgresのパスワード
PGDATA: /database

concourse-web:
image: concourse/concourse
links: [concourse-db]
command: web
depends_on: [concourse-db]
ports: ["8080:8080"]
volumes: ["./keys/web:/concourse-keys"]
restart: unless-stopped # required so that it retries until concourse-db comes up
environment:
CONCOURSE_BASIC_AUTH_USERNAME: concourse // ←※Web画面のユーザ名
CONCOURSE_BASIC_AUTH_PASSWORD: changeme // ←※Web画面のパスワード
CONCOURSE_EXTERNAL_URL: "${CONCOURSE_EXTERNAL_URL}"
CONCOURSE_POSTGRES_HOST: concourse-db
CONCOURSE_POSTGRES_USER: concourse // ←※postgresのユーザ名
CONCOURSE_POSTGRES_PASSWORD: changeme // ←※postgresのパスワード
CONCOURSE_POSTGRES_DATABASE: concourse

concourse-worker:
image: concourse/concourse
privileged: true
links: [concourse-web]
depends_on: [concourse-web]
command: worker
volumes: ["./keys/worker:/concourse-keys"]
environment:
CONCOURSE_TSA_HOST: concourse-web

この後も、公式のマニュアル通りに

1
2
3
4
5
6
7
8
9
10
11
12
13
// SSH鍵を発行
$ mkdir -p keys/web keys/worker
$ ssh-keygen -t rsa -f ./keys/web/tsa_host_key -N ''
$ ssh-keygen -t rsa -f ./keys/web/session_signing_key -N ''
$ ssh-keygen -t rsa -f ./keys/worker/worker_key -N ''
$ cp ./keys/worker/worker_key.pub ./keys/web/authorized_worker_keys
$ cp ./keys/web/tsa_host_key.pub ./keys/worker

// アクセスURLを設定
$ export CONCOURSE_EXTERNAL_URL=http://[DockerホストのIPやドメインなど]:8080

// コンテナ作成
$ docker-compose up -d

作成後、CONCOURSE_EXTERNAL_URLにアクセスすると、Web画面が見れます

この画像がflyファイルのDLリンクになっているので、自分の環境のflyコマンドをDLします。本記事では、DebianなのでLinux版を使用します

1
2
// DLしたflyを、適当なPATHの通った所に置く
$ mv fly ~/bin/

使ってみる

1
2
3
4
5
6
7
8
// ログイン
$ fly -t lite login -c [CONCOURSE_EXTERNAL_URLに設定したURL]
logging in to team 'main'

username: concourse
password:

target saved

公式のhelloを実行してみる

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ vim hello.yml

jobs:
- name: hello-world
plan:
- task: say-hello
config:
platform: linux
image_resource:
type: docker-image
source: {repository: ubuntu}
run:
path: echo
args: ["Hello, world!"]
1
2
// 実行
$ fly -t lite set-pipeline -p hello-world -c hello.yml

実行すると、Webで進捗が見れるよ的なメッセージが出るので、Web画面を見に行きます

helloの結果

なぜかぼくの、TinyCoreLinux環境(=DockerToolBox)では、checking pipeline is not pausedという所がずっとぐるぐるして進まなかったので、後日別の環境でやってみることにする(きょうはもうじかんがない)

タスク実行すると、permission deniedが出てたので、DockerToolBoxのユーザ権限まわりかと

で、メモリどのぐらい食ってるの?

バリ重のJenkinsからどのぐらい軽くなってるのか見てみた

1
2
3
4
5
6
7
8
9
10
11
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2caac143e7c0 concourse/concourse "/usr/local/bin/du..." 30 minutes ago Up 30 minutes concorseci_concourse-worker_1
01802741363b concourse/concourse "/usr/local/bin/du..." 30 minutes ago Up 30 minutes 0.0.0.0:8080->8080/tcp concorseci_concourse-web_1
38d07bfd168d postgres:9.6 "docker-entrypoint..." 30 minutes ago Up 30 minutes 5432/tcp concorseci_concourse-db_1

$ docker stats
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
2caac143e7c0 0.02% 15.48MiB / 995.8MiB 1.55% 222kB / 207kB 517MB / 0B 9
01802741363b 2.52% 12.51MiB / 995.8MiB 1.26% 3.72MB / 34.9MB 55.3MB / 0B 9
38d07bfd168d 1.86% 16.16MiB / 995.8MiB 1.62% 1.84MB / 2.03MB 48.7MB / 32.1MB 14

すばらC