概要

drone0.4 の plugin が増えてきたので、0.3からのバージョンアップを検討中。
プラグインのリストはここから確認できる。

drone0.4環境については、Docker 化のついでに kubernetes で構築する。
kubernetes の構築はめんどいので GKE を利用する。

レポジトリは Bitbucket を利用。

kubernetes 環境構築

コンテナクラスタ作成するのみ。

以前 作成した terraform のコードを利用。
drone の sqlite データベース用の Persistent Disk 用の tf ファイルを追加する。
ディスク名(ここでは drone-data-disk)は kubernetes の設定時にも使用するのでひかえておく。

disk.tf

resource "google_compute_disk" "drone" {
  name = "drone-data-disk"
  type = "pd-ssd"
  zone = "${var.zone}"
  size = 10
}

また、PD マウントのため、ノードインスタンスにコンピュート権限を追加する必要がある(oauth_scopes に追加)

container_cluster.tf

resource "google_container_cluster" "default" {
  name = "${var.cluster_name}"
  zone = "${var.zone}"
  network = "${var.network}"
  initial_node_count = "${var.initial_node_count}"

  node_config {
    machine_type = "${var.machine_type}"
    disk_size_gb = "${var.disk_size}"
    oauth_scopes = [
      "https://www.googleapis.com/auth/compute"
    ]
  }

  master_auth {
    username = "${var.master_auth_username}"
    password = "${var.master_auth_password}"
  }

}

terraform apply が完了したら kubectl の認証情報を取得。

$ gcloud container clusters get-credentials cluster-1

kubernetes で drone の Service を作成

まずはサービス用マニフェストを作成

drone-service.yml

apiVersion: v1
kind: Service
metadata:
  name: drone
  labels:
    name: drone
spec:
  type: LoadBalancer
  selector:
    name: drone
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 80

Service 作成

$ kubectl create -f drone-service.yml
service "drone" created

LB の IP アドレスを確認(EXTERNAL_IP)

$ kubectl get svc
NAME         CLUSTER_IP     EXTERNAL_IP       PORT(S)   SELECTOR     AGE
drone        10.55.252.25   xxx.xxx.xxx.xxx   80/TCP    name=drone   2m

Bitbucket の設定

コンシューマキーの登録

右上メニューの「Settings」→「OAuth」で コンシューマキーを追加。

入力内容

Name: 適当に
Callback URL: http://{先ほど確認した LB の IP アドレス}/authorize
権限: 以下の通り

保存して、「鍵」と「Secret」の情報をひかえておく。

kubernetes で ReplicationController 作成

レプリケーションコントローラ用マニフェストを作成

drone-rc.yml

apiVersion: v1
kind: ReplicationController
metadata:
  name: drone
  labels:
    name: drone
spec:
  replicas: 1
  selector:
    name: drone
  template:
    metadata:
      labels:
        name: drone
    spec:
      containers:
      - name: drone
        image: drone/drone:0.4
        env:
        - name: SERVER_ADDR
          value: ":80"
        - name: DATABASE_DRIVER
          value: sqlite3
        - name: DATABASE_CONFIG
          value: /var/lib/drone/drone.sqlite
        - name: REMOTE_DRIVER
          value: bitbucket
        - name: REMOTE_CONFIG
          value: https://bitbucket.org?client_id={Bitbucketの鍵}&client_secret={BitbucketのSecret}&open=true
        ports:
          - containerPort: 80
            protocol: TCP
        volumeMounts:
          - mountPath: /var/lib/docker
            name: docker
          - mountPath: /var/run/docker.sock
            name: docker-socket
          - mountPath: /var/lib/drone
            name: drone-db
      volumes:
        - name: docker
          hostPath:
            path: /var/lib/docker
        - name: docker-socket
          hostPath:
            path: /var/run/docker.sock
        - name: drone-db
          gcePersistentDisk:
            pdName: drone-data-disk
            fsType: ext4

ReplicationController 作成

$ kubectl create -f rc.yml
replicationcontroller "drone" created

アカウントの登録

Drone の UI にアクセスする。
http://{先ほど確認した LB の IP アドレス}/

ログインを押して、Bitbucket アカウントでログインして、アクセス許可する。

ダッシュボードにレポジトリの一覧が表示されたらOK。

とりあえず初期構築はここまで。
CI については別途。