画像
パイプラインステップは、一連のDockerコンテナとして定義されます。したがって、各ステップで、コンテナの作成に使用されるDockerイメージを定義する必要があります。
1 kind: pipeline
2 type: docker
3 name: default
4
5 steps:
6 - name: build
7 image: golang:1.12
8 commands:
9 - go build
10 - go test
Droneは、Dockerレジストリからの有効なDockerイメージをサポートします。
image: golang
image: golang:1.7
image: library/golang:1.7
image: index.docker.io/library/golang
image: index.docker.io/library/golang:1.7
image: docker.company.com/golang
画像のプル
イメージがローカルキャッシュに存在しない場合、DroneはDockerにイメージを自動的にプルするように指示します。手動で画像をプルする必要はありません。
イメージが明示的または暗黙的に:latestでタグ付けされている場合、イメージがローカルキャッシュに存在する場合でも、Droneはリモートレジストリからイメージの最新バージョンをプルしようとします。
ローカルキャッシュに見つからない場合にのみイメージをプルするには:
5 steps:
6 - name: build
7 pull: if-not-exists
8 image: golang
常に最新バージョンのイメージをプルするには:
5 steps:
6 - name: build
7 pull: always
8 image: golang:1.12
イメージをプルせず、常にローカルキャッシュ内のイメージを使用するには:
5 steps:
6 - name: build
7 pull: never
8 image: golang:1.12
プライベート画像のプル
画像がプライベートの場合は、シークレットから取得したDockerクレデンシャルをDroneに提供する必要があります。シークレットは、ウェブインターフェースのリポジトリ設定画面で管理できます。
まず、Docker config.jsonファイルの形式でDockerクレデンシャルを含むシークレットを作成します。このファイルは、複数のレジストリの資格情報を提供する場合があります。
1 {
2 "auths": {
3 "docker.io": {
4 "auth": "4452D71687B6BC2C9389C3..."
5 }
6 }
7 }
image_pull_secrets
属性を使用して、プライベートイメージをプルするために使用するシークレットを定義します。
5 steps:
6 - name: build
7 image: registry.internal.company.com/golang:1.12
8 commands:
9 - go build
10 - go test
11
12 image_pull_secrets:
13 - dockerconfig
Googleコンテナレジストリの問題
gcr.io
とhttps://gcr.io
両方のエントリがある場合はhttps://
プレフィックスが付いたエントリを削除する必要があります。そうしないと、次のエラーメッセージが断続的に表示されます。
デフォルト:デーモンからのエラー応答:許可されていません:この操作を実行するために必要な権限がなく、無効な資格情報を持っている可能性があります。リクエストを認証するには、 https://cloud.google.com/container-registry/docs/advanced-authenticationの手順に従います。
画像のキャッシュ動作
Dockerデーモンは、プライベートイメージを含む、プルされるすべてのイメージをキャッシュします。 Dockerは、キャッシュされたイメージの使用を制限しません。すでにローカルキャッシュにある画像は、どのパイプラインでも使用できます。
したがって、パイプラインがDockerによってキャッシュされたプライベートイメージをプルし、別のパイプラインが資格情報なしでキャッシュからこのイメージを使用する可能性があります。共有環境またはパブリック環境でプライベートイメージをプルする場合は、このことに注意してください。