🚁

CI/CDツールDroneを使ってみた① Droneのインストール

2023/03/05に公開

お久しぶりです。
「アウトプット」を今年のテーマにした、一か月記事公開しなかったキョです。。。

今回は前回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を選択したのですか?
理由は以下です。

  1. 他のCI/CDツールの設定が難しそう!!!
  2. 最近はGo言語の勉強もやっているので、Go製製品を利用したくなった
    ※実はバージョン管理もGo製のGiteaを利用している

環境構築

Droneは

  1. droneサーバー
  2. droneランナー

二つを設定する必要があります。
すべて、Dockerイメージを利用して設定していきたいと思います。

droneサーバー

まずは、droneサーバーのインストールです。
giteaでOAuthアプリケーションを作成する必要もあります。
公式サイトの手順は以下になります。
https://docs.drone.digitalstacks.net/l/ja/provider/gitea

droneランナー

doroneランナーもDockerランナーを利用して、
公式サイトの手順は以下になります。
https://docs.drone.digitalstacks.net/l/ja/about-docker/overview

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

やりながら詰まったところ

  1. Giteaのwebhookはデフォルト設定として、「https」のURLにしか送信できないので、gitea側の設定を変更しないといけなかった
    https://docs.gitea.io/en-us/config-cheat-sheet/
[webhook]
SKIP_TLS_VERIFY = true
  1. droneランナーで指定するDRONE_RPC_HOSTはdroneサーバー「80ポート」

Droneパイプラインを設定

DroneのパイプラインもDockerパイプラインを利用するようにしました。
公式サイトの手順は以下になります。
https://docs.drone.digitalstacks.net/l/ja/quick-start/docker-pipelines

うまく動くをテストするために、公式サイトのテスト用「.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