クローニング
Droneは、パイプラインステップを実行する前に、リポジトリのクローンを自動的に作成します。特別な設定は必要ありません。ただし、場合によっては、デフォルトのクローン動作をカスタマイズ、オーバーライド、または無効にする必要があります。
--depthフラグ
デフォルトのクローン構成では、 --depth
フラグが使用されます。 clone
ブロックをdepth
属性を追加することで、クローンの深さを強制できます。
1 kind: pipeline
2 type: docker
3 name: default
4
5 clone:
6 depth: 50
7
8 steps:
9 - name: build
10 image: golang
11 commands:
12 - go build
13 - go test
--tagsフラグ
デフォルトのクローン構成では、 --tags
フラグは使用されません。タグをフェッチする場合は、パイプラインのステップとしてこれを処理する必要があります。例えば:
1 kind: pipeline
2 type: docker
3 name: default
4
5 steps:
6 - name: fetch
7 image: alpine/git
8 commands:
9 - git fetch --tags
10
11 - name: build
12 image: golang
13 commands:
14 - go build
15 - go test
--recursiveフラグ
デフォルトのクローン動作は--recursive
フラグを使用せず、サブモジュールをフェッチしません。サブモジュールをフェッチする場合は、パイプラインのステップとしてこれを処理する必要があります。例えば:
1 kind: pipeline
2 type: docker
3 name: default
4
5 steps:
6 - name: submodules
7 image: alpine/git
8 commands:
9 - git submodule update --recursive --remote
10
11 - name: build
12 image: golang
13 commands:
14 - go build
15 - go test
カスタムロジック
必要に応じて、デフォルトのクローン動作を無効にし、カスタムクローンロジックを実装できます。次の例では、パイプラインステップとしてカスタムクローンコマンドを実装します。
1 kind: pipeline
2 type: docker
3 name: default
4
5 clone:
6 disable: true
7
8 steps:
9 - name: clone
10 image: alpine/git
11 commands:
12 - git clone https://github.com/octocat/hello-world.git .
13 - git checkout $DRONE_COMMIT
14
15 - name: build
16 image: golang
17 commands:
18 - go build
19 - go test
認証
リポジトリがプライベートであるか、クローンを作成するために認証が必要な場合、Droneは資格情報をパイプライン環境に挿入します。Droneは、リポジトリ所有者に関連付けられたoauth2トークンをクローン資格情報として使用します。
セキュリティに関する考慮事項
リポジトリがプライベートであるか、クローンを作成するために認証が必要な場合、クローンの資格情報がパイプライン環境に挿入されます。つまり、悪意のある共同編集者が、パイプラインの実行中にこれらの資格情報を公開しようとするパッチを(パイプライン構成、単体テストなどに)送信する可能性があります。Droneは、これらのリスクを軽減するために、以下に説明するオプションを提供します。
クローンクレデンシャルを制限する
クローンクレデンシャルのみをデフォルトのクローンステップに挿入するようにDroneランナーを構成することをお勧めします。これにより、信頼できないコードがクローンの資格情報にアクセスして公開することができなくなります。
マシンアカウント
リポジトリとその依存関係のクローンを作成するために必要な正確な権限とアクセス権を持つマシンユーザーを作成することもできます。マシンのユーザーアカウントを使用してDroneにログインし、リポジトリをアクティブ化します。マシンアカウントのクレデンシャルがパイプライン環境に挿入されるため、ユーザーアカウントにリンクされたクレデンシャルが公開されるリスクがなくなります。
グローバルマシンアカウント
前のセクションでは、 マシンユーザーの作成について説明しました。このアプローチの欠点は、リポジトリをアクティブ化するためにマシンユーザーとしてログインする必要があることです。このセクションでは、リポジトリをアクティブ化したアカウントに関係なく、マシンアカウントの資格情報を使用する方法について説明します。
グローバルマシンアカウントを構成すると、リポジトリをアクティブ化したアカウントに関係なく、Droneは常にグローバルマシンアカウントの資格情報を使用してすべてのプライベートリポジトリのクローンを作成するように強制されます。次のリンクを使用して、グローバル資格情報を構成してください。