サービス
Droneは、パイプラインの一部としてデタッチされたサービスコンテナの起動をサポートします。サービスの一般的な使用例は、単体テストで実行中のredisサーバが必要な場合です。次に例を示します。
1 kind: pipeline
2 type: docker
3 name: default
4
5 services:
6 - name: cache
7 image: redis
サービスコンテナは、コンテナ名と同じホスト名で到達可能です。前の例では、redisコンテナ名はcacheで、 tcp://cache:6379
パイプラインからアクセスできます。
1 kind: pipeline
2 type: docker
3 name: default
4
5 steps:
6 - name: ping
7 image: redis
8 commands:
9 - redis-cli -h cache ping
10
11 services:
12 - name: cache
13 image: redis
サービスコンテナの終了コードは無視され、ゼロ以外の終了コードはパイプライン全体に失敗しないことに注意することが重要です。Droneは、パイプラインの完了後にサービスコンテナを強制終了する必要があることが多いため、サービスコンテナがゼロ以外の終了コードで終了することを想定しています。
切り離されたステップ
サービスは、分離されたパイプラインステップとして、パイプラインで直接定義することもできます。これは、パイプラインの他のステップと比較して、サービスの開始時期を直接制御する必要がある場合に役立ちます。
1 kind: pipeline
2 name: default
3
4 steps:
5 - name: cache
6 image: redis
7 detach: true
8
9 - name: ping
10 image: redis
11 commands:
12 - redis-cli -h cache ping
一般的な問題
このセクションでは、サービスを構成するときにユーザーが遭遇するいくつかの一般的な問題に焦点を当てます。引き続き問題が発生する場合は、よくある質問も確認してください。 yamlをサンプルのサービス構成と比較することもできます。
不正なホスト名
パイプラインからサービスに接続するためにlocalhost
または127.0.0.1
アドレスを使用できないことを覚えておくことが重要です。サービスコンテナには、独自のIPアドレスとホスト名が割り当てられます。ホスト名は、サービスコンテナ名に基づいています。
1 kind: pipeline
2 type: docker
3 name: default
4
5 steps:
6 - name: ping
7 image: redis
8 commands:
9 - redis-cli -h cache ping
10
11 services:
12 - name: cache
13 image: redis
初期化
コンテナが開始された後、コンテナ内で実行されているソフトウェア(redisなど)は、初期化して接続の受け入れを開始するのに時間がかかることを覚えておくことが重要です。
接続を試みる前に、サービスを初期化するのに十分な時間を与えてください。素朴な解決策は、sleepコマンドを使用することです。
1 kind: pipeline
2 type: docker
3 name: default
4
5 steps:
6 - name: ping
7 image: redis
8 commands:
9 - sleep 5
10 - redis-cli -h cache ping
11
12 services:
13 - name: cache
14 image: redis