Dockerパイプライン

Updated 2 years ago by Admin

このチュートリアルは、単純なDockerパイプラインを作成して実行するのに役立ちます。詳細な使用方法については、パイプラインのドキュメントを参照してください。


ステップ1:認証する

まず、ブラウザでDroneサーバのURLに移動します。まだ認証されていない場合、DroneはログインするためにGitHubにリダイレクトします。

ログイン後、Droneダッシュボードにリダイレクトされます。Droneを初めて使用する場合、DroneがリポジトリリストをGitHubと同期している間、ダッシュボードは数秒間空になります。


ステップ2:リポジトリを有効にする

次に、リポジトリを検索して、[有効にする]ボタンをクリックします。有効化ボタンをクリックすると、リポジトリにウェブフックが追加され、コードをプッシュするたびにDroneに通知されます。有効にするには、リポジトリに対する管理者権限が必要であることに注意してください。


ステップ3:パイプラインを構成する

次に、gitリポジトリのルートに.drone.ymlファイルを作成してパイプラインを構成する必要があります。このファイルでは、ウェブフックを受信するたびに実行される一連のステップを定義します。

1   kind: pipeline
2 type: docker
3 name: default
4
5 steps:
6 - name: greeting
7 image: alpine
8 commands:
9 - echo hello
10 - echo world

この例で使用されている変数の概要は次のとおりです。

  • kind
    kind属性は、オブジェクトの種類を定義します。この例では、パイプラインオブジェクトを定義します。他の種類のオブジェクトは、シークレットオブジェクトと署名オブジェクトです。

  • type
    type属性は、パイプラインのタイプを定義します。この例では、各パイプラインステップがDockerコンテナ内で実行されるDockerパイプラインを定義します。Droneは、さまざまなタイプのパイプライン実行環境をサポートしています。

  • name
    name属性は、パイプラインの名前を定義します。プロジェクトに1つまたは複数のパイプラインを定義できます。

  • steps
    stepsセクションは、シリアルに実行されるパイプラインステップの配列を定義します。パイプラインのいずれかのステップが失敗した場合、パイプラインはすぐに終了します。
    • name
      name属性は、パイプラインステップの名前を定義します。
    • image
      image属性は、シェルコマンドが実行されるDockerイメージを定義します。プライベートレジストリを含む任意のDockerレジストリから、パイプライン内の任意のDockerイメージを使用できます。
    • commands
      commands属性は、Dockerコンテナ内でコンテナエントリポイントとして実行されるシェルコマンドのリストを定義します。コマンドがゼロ以外の終了コードを返す場合、パイプラインステップは失敗します。

構成オプションの完全なリストについては、パイプラインのドキュメントを参照してください。

その他の例

  • パイプラインに複数のステップを追加できます。
    1   kind: pipeline
    2 type: docker
    3 name: greeting
    4
    5 steps:
    6 - name: en
    7 image: alpine
    8 commands:
    9 - echo hello world
    10
    11 - name: fr
    12 image: alpine
    13 commands:
    14 - echo bonjour monde

  • ステップの実行を条件付きで制限できます。
    1   kind: pipeline
    2 type: docker
    3 name: greeting
    4
    5 steps:
    6 - name: en
    7 image: alpine
    8 commands:
    9 - echo hello world
    10
    11 - name: fr
    12 image: alpine
    13 commands:
    14 - echo bonjour monde
    15 when:
    16 branch:
    17 - develop

  • 複数のパイプラインを定義することもできます。
    1   kind: pipeline
    2 type: docker
    3 name: en
    4
    5 steps:
    6 - name: greeting
    7 image: alpine
    8 commands:
    9 - echo hello world
    10
    11 ---
    12 kind: pipeline
    13 type: docker
    14 name: fr
    15
    16 steps:
    17 - name: greeting
    18 image: alpine
    19 commands:
    20 - echo bonjour monde

  • パイプラインの実行を条件付きで制限できます。
    1   kind: pipeline
    2 type: docker
    3 name: en
    4
    5 steps:
    6 - name: greeting
    7 image: alpine
    8 commands:
    9 - echo hello world
    10
    11 trigger:
    12 event:
    13 - push
    14
    15 ---
    16 kind: pipeline
    17 type: docker
    18 name: fr
    19
    20 steps:
    21 - name: greeting
    22 image: alpine
    23 commands:
    24 - echo bonjour monde
    25
    26 trigger:
    27 event:
    28 - pull_request

  • 任意のDockerレジストリから任意のイメージを使用できます。
    1   kind: pipeline
    2 type: docker
    3 name: default
    4
    5 steps:
    6 - name: test
    7 image: gcr.io/library/golang
    8 commands:
    9 - go build
    10 - go test -v

  • 統合テスト用のサービスコンテナを定義できます。
    1   kind: pipeline
    2 type: docker
    3 name: default
    4
    5 steps:
    6 - name: test
    7 image: golang:1.13
    8 commands:
    9 - go build
    10 - go test -v
    11
    12 services:
    13 - name: redis
    14 image: redis

  • プラグインを使用してサードパーティシステムと統合し、ソフトウェアの通知、公開、展開などの一般的なタスクを実行できます。
    1   kind: pipeline
    2 type: docker
    3 name: default
    4
    5 steps:
    6 - name: test
    7 image: golang:1.13
    8 commands:
    9 - go build
    10 - go test -v
    11
    12 - name: notify
    13 image: plugins/slack
    14 settings:
    15 channel: dev
    16 webhook: https://hooks.slack.com/services/...

  • シークレットから機密パラメータを取得することもできます。
    1   kind: pipeline
    2 type: docker
    3 name: default
    4
    5 steps:
    6 - name: test
    7 image: golang:1.13
    8 commands:
    9 - go build
    10 - go test -v
    11
    12 - name: notify
    13 image: plugins/slack
    14 settings:
    15 channel: dev
    16 webhook:
    17 from_secret: endpoint

ステップ4:パイプラインを実行する

最後のステップは、 .drone.ymlをリポジトリにコミットし、変更をプッシュすることです。コードをプッシュすると、GitHubはウェブフックをDroneに送信し、Droneがパイプラインを実行します。


How did we do?