0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Drone CI 基本設定 (.drone.yml)

Last updated at Posted at 2021-04-10

Drone CI を使って CI/CD をおこなうには、リポジトリのトップレベルに .drone.yml という名前のファイルを作成する。

参考) 公式ドキュメント

実行内容の設定 (Pipeline)

ステップの設定

参考) Pipelines > Docker > Configuration > Steps

steps に実行手順を記述する。step ごとに指定した Docker イメージでコンテナが生成され、その上でコマンドが実行される。Docker イメージは基本的には Docker Hub から適当なものを選択する。適当なイメージが Docker Hub に存在しない場合は、別の Docker リポジトリと連携したり、その場で作成するなどする。

---
kind: pipeline
type: docker
name: default

steps:
  - name: (任意の名前)
    image: (Docker イメージ名)
    command:
      - (実行するコマンド)

ステップは記述した順に実行され、デフォルトでは失敗した場合は後続のステップは実行されない。失敗した場合も実行するには when で条件を記述する。

steps:
  - name: ...
    image: ...
    when:
      status: [ success, failure ]

トリガーの設定

何をトリガーに実行するかを指定する。

参考) Pipelines > Docker > Configuration > Triggers

例) master ブランチへの push/merge をトリガーに実行する場合

trigger:
  branch:
    - master
  event:
    - push

この場合すべての条件に一致する場合しか指定できないため、複数の組み合わせパターンを指定したい場合は、ref を使う。

例) master ブランチへの Push/Merge、Pull Request、タグづけをトリガーに実行する場合

trigger:
  ref:
    - refs/heads/master     # master ブランチへの push/merge
    - refs/pull/**          # Pull Request
    - refs/tags/**          # タグ付け

それぞれ実行するステップを変更したい場合は、各ステップで同じように when で指定する。

例) タグづけ時のみステップを実行する場合

steps:
  - name: タグづけ時のみ実行するステップ
    image: ...
    when:
      event:
        - tag

自作 Docker イメージの使用

ホストの Docker 上にイメージを作成し、それを使用する。

★ホスト上に生成するため、他リポジトリで生成するイメージとかぶらないイメージ名を指定すること。

  1. イメージをビルドする Dockerfile を作成する。

  2. .drone.yml にイメージをビルドする step を記述する。

    steps:
      - name: build-worker
        image: docker
        volumes:                  # ホストの Docker を使用するための設定
          - name: docker.sock
            path: /var/run/docker.sock
        commands:
          - docker build -f (Dockerfileのファイル名) -t (イメージ名) .
    
    volumes:                      # ホストの Docker を使用するための設定
      - name: docker.sock
        host:
          path: /var/run/docker.sock
    
  3. このイメージを使って実行する step で、作成したイメージと pull: never を記述する。

      - name: (任意の名前)
        image: (作成したイメージ名)
        pull: never
        commands:
          - (実行するコマンド)
    

キャッシュ

参考) Plugins | Drone > Drillsters > Volume Cache

以下の設定をすることで、指定したパスがホストの /tmp/(リポジトリ名)/(ブランチ名).tar に保存され、次回ビルド時に復元される。

steps:
  - name: restore-cache
    image: plugins/volume-cache
    settings:
      mount:
        - (キャッシュするパス)
      restore: true
    volumes:
      - name: cache
        path: /cache

  (実行する steps を記述)

  - name: rebuild-cache
    image: plugins/volume-cache
    settings:
      mount:
        - (キャッシュするパス)
      rebuild: true
    volumes:
      - name: cache
        path: /cache

volumes:                      # キャッシュの保存先 (ホストの /tmp を指定)
  - name: cache
    host:
      path: /tmp

Docker の実行 (Docker in Docker)

処理内で docker を実行したい場合、DinD コンテナを使用する。(ホストの Docker には影響しない)

docker:19-dind 以降では TLS を無効にするため DOCKER_TLS_CERTDIR: "" を指定する必要がある。(参考)

steps:
  - name: (任意の名前)
    image: (Docker イメージ)
    environment:                    # DinD コンテナの Docker を使用する設定
      DOCKER_HOST: tcp://docker:2375
    command:
      - sleep 10                    # Docker の準備完了を待つ (必要に応じて)
      - (実行するコマンド)

services:                           # DinD コンテナを起動する設定
  - name: docker
    image: docker:dind
    privileged: true
    environment:
      DOCKER_TLS_CERTDIR: ""

環境変数

定義済み変数の使用

参考) Environment > Reference

ここに定義されている変数が使用できる。

暗号化した変数の使用

Encrypted を使用する方法。

Drone CLI を使って以下のコマンドを実行し、リポジトリ毎に暗号化した文字列を生成する。

$ drone encrypt (リポジトリ名) (平文)
(暗号化文字列)

Slack 通知先の Webhook URL を暗号化した例

steps:
  - name: notify
    image: plugins/slack
    settings:
      webhook:
        from_secret: (変数名)

---
kind: secret
name: (変数名)
data: (暗号化文字列)

Slack への通知

参考 Plugins | Drone > Drone-plugins > Slack

Slack で Webhook URL を作成しておく。(作成済みの場合は設定から Webhook URL を確認する。)

  1. Slack > Slack をカスタマイズ > App管理 > カスタムインテグレーション > Incoming Webhook > 設定を追加
  2. 通知先チャンネルを指定: #droneci

作成した URL を Secrets に登録し、プラグインに指定する。

steps:
  - name: notify
    image: plugins/slack
    settings:
      webhook:
        from_secret: slack_webhook
    when:
      status: [ success, failure ]

メッセージを変更したい場合は template で指定する。

    settings:
      template: |-
        *{{build.status}}* <{{build.link}}|{{repo.owner}}/{{repo.name}}#{{truncate build.commit 8}}> ({{build.branch}}) by {{build.author}}

その他

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?