CI/CDツールDroneを使ってみた① Droneのインストール
お久しぶりです。
「アウトプット」を今年のテーマにした、一か月記事公開しなかったキョです。。。
今回は前回Docker化したVueアプリをDroneというCI/CDツールを利用して、
自宅のLinuxサーバーにデプロイするまで行ったことを備忘録として残りたいと思います。
まず、Droneのインストールまで行いたいと思います。
Droneとは
DroneはGo言語で作った、dockerをベースとしたCI/CDのためのプラットフォームです。
以下の二つバージョンがあり、
- Open Source Edition
- Enterprise Edition
今回はOpenSourceバージョンを利用します。
※実はEnterprise Editionも無料利用できますが、以下の条件があります。
公式サイトからのFAQ引用になります。
https://docs.drone.io/enterprise/#is-drone-enterprise-free-for-startups
Is Drone Enterprise Free for Startups?
The Enterprise Edition is free for organizations with under $1 million US dollars in annual gross revenue.
何でDrone
では、何でDroneを選択したのですか?
理由は以下です。
- 他のCI/CDツールの設定が難しそう!!!
- 最近はGo言語の勉強もやっているので、Go製製品を利用したくなった
※実はバージョン管理もGo製のGiteaを利用している
環境構築
Droneは
- droneサーバー
- droneランナー
二つを設定する必要があります。
すべて、Dockerイメージを利用して設定していきたいと思います。
droneサーバー
まずは、droneサーバーのインストールです。
giteaでOAuthアプリケーションを作成する必要もあります。
公式サイトの手順は以下になります。
droneランナー
doroneランナーもDockerランナーを利用して、
公式サイトの手順は以下になります。
docker-composeファイル
公式サイトの手順は、十分にわかりやすいですが、
手順ではDockerイメージをダウンロードして、
直接コンテナ起動する形式になりますので、
簡単に再設置するため、以下のようにdocker-composeファイルを作成してみました。
version: '3.9'
services:
drone-server:
image: drone/drone:1
ports:
# droneサーバー外部に公開するポート(giteaのコールバックURLのドメインとdroneランナーの「DRONE_RPC_HOST」もこちらを指定)
- 8090:80
# 正直何のために指定しているかわからないが、ドキュメントにあったので指定
- 443:443
volumes:
- /var/lib/drone:/var/lib/drone/
restart: always
environment:
# 必要な文字列値は、Giteaサーバアドレス
- DRONE_GITEA_SERVER=http://192.168.0.100:3000/
# 必要な文字列値は、Gitea oauthクライアントID
- DRONE_GITEA_CLIENT_ID=
# 必要な文字列値は、Gitea oauthクライアントシークレット
- DRONE_GITEA_CLIENT_SECRET=
# 必要な文字列値は、共有シークレット
- DRONE_RPC_SECRET=
# 必要な文字列値は、外部ホスト名またはIPアドレス
- DRONE_SERVER_HOST=192.168.0.100:8090
# 必要な文字列値は、外部プロトコルスキーム(httpまたはhttps)
- DRONE_SERVER_PROTO=http
drone-runner:
image: drone/drone-runner-docker:1
ports:
# こちらについても、指定する必要あるかわからないがドキュメントにあったので指定
- 3001:3000
volumes:
- /var/run/docker.sock:/var/run/docker.sock
restart: always
environment:
# Droneサーバのホスト名(droneサーバー外部に公開するポート指定)
- DRONE_RPC_HOST=192.168.0.100:8090
# 必要な文字列値は、Droneサーバへの接続に使用されるプロトコル
- DRONE_RPC_PROTO=http
# 必要な文字列値は、共有シークレット
- DRONE_RPC_SECRET=
# ランナーが実行できる同時パイプラインの数
- DRONE_RUNNER_CAPACITY=2
# ランナーの名前
- DRONE_RUNNER_NAME=gitea-runner
やりながら詰まったところ
- Giteaのwebhookはデフォルト設定として、「https」のURLにしか送信できないので、gitea側の設定を変更しないといけなかった
https://docs.gitea.io/en-us/config-cheat-sheet/
[webhook]
SKIP_TLS_VERIFY = true
- droneランナーで指定するDRONE_RPC_HOSTはdroneサーバー「80ポート」
Droneパイプラインを設定
DroneのパイプラインもDockerパイプラインを利用するようにしました。
公式サイトの手順は以下になります。
うまく動くをテストするために、公式サイトのテスト用「.drone.yml」を
giteaのリポジトリのルートに追加して、pushしてみました。
kind: pipeline
type: docker
name: default
steps:
- name: greeting
image: alpine
commands:
- echo hello
- echo world
Droneサーバーを確認してみたら、うまく動いているようですね。
終わり
これで一通りDroneのインストールが終わりました。
Dockerイメージの変数設定部分でちょっと詰まった以外、
本当に公式サイトの手順通りやって、Dockerイメージをダウンロードするだけで簡単に済みました。
次回はアプリのデプロイをするパイプラインを作成したいと思います。
みなさんもぜひ試してみてください。
Discussion