コマンドラインランナー
コマンドラインツールを使用して、開発およびデバッグの目的で、ラップトップまたはパーソナルコンピューター上でローカルにDockerパイプラインを実行できます。これは、私のコンピューターでは正常に機能するという一般的な苦情に対する私たちの答えです。
インストール
- Homebrewを使用してOSXにコマンドラインツールをインストールします。
$ brew install drone-cli
- Scoopを使用してWindowsにコマンドラインツールをインストールします。
$ scoop install drone
使用法
コマンドラインランナーには、Dockerが正常にインストールされている必要があります。Droneは、ローカルのDockerデーモンを使用して、ホストマシン上でローカルにパイプラインを実行します。ローカル実行には、Droneサーバとの通信はありません。
.drone.yml
ファイルが配置されているgitリポジトリのルートディレクトリに移動します。テスト目的で使用できる基本的な構成は次のとおりです。kind: pipeline
type: docker
name: default
steps:
- name: test
image: alpine
commands:
- echo hello
- echo world- コマンドラインからパイプラインを実行します。
$ drone exec
- このコマンドは、分析のためにパイプラインログを端末にストリーミングします。パイプラインに障害が発生した場合、コマンドはゼロ以外の終了コードを返します。
$ drone exec
[test:1] + echo hello
[test:2] hello
[test:3] + echo world
[test:4] world
ワークスペース
コマンドラインランナーは、パイプラインステップの作業ディレクトリとして、Dockerボリュームを使用して現在の作業ディレクトリをマウントします。は、コードをパイプラインに公開します。したがって、ローカルで実行する場合、クローンステップはスキップされます。
特定のパイプラインを実行する
コマンドラインランナーはデフォルトのパイプラインを実行します。パイプラインに別の名前を使用する場合、またはyamlで複数のパイプラインを定義する場合は、 --pipeline
フラグを使用して名前付きパイプラインを実行できます。
- testという名前のパイプラインを使用した構成例
kind: pipeline
type: docker
name: test
steps:
- name: dist
image: node
commands:
- npm install
- npm run dist - コマンドの例は、テストパイプラインを実行します
drone exec --pipeline=test
特定の手順を実行する
パイプラインをローカルで実行する場合、実行するパイプラインステップとスキップするパイプラインステップを制限できます。
- パイプラインステップのビルドとテストのみを実行します
drone exec --include=build --include=test
- デプロイを除くすべてのパイプラインステップを実行します
drone exec --exclude=deploy
シークレットをエミュレートする
コマンドラインランナーには、サーバに保存されているシークレットへの読み取りアクセス権がありません。テキストファイルを介してコマンドラインランナーにシークレットを渡すことにより、ローカルパイプラインにシークレットを提供できます。
- シークレットから供給された、ユーザー名とパスワードの環境変数を必要とするパイプラインの例。
kind: pipeline
type: docker
name: default
steps:
- name: test
environment:
USERNAME:
from_secret: USERNAME
PASSWORD:
from_secret: PASSWORD - キー値形式で1行に1つずつ定義されたシークレットを含む単純なテキストファイルを作成します。このデモでは、ファイルに
secrets.txt
という名前を付けます。USERNAME=root
PASSWORD=password - パイプラインを実行するときに、コマンドラインフラグを介してシークレットファイルを提供します。
$ drone exec --secret-file=secrets.txt
コマンドラインランナーは、 dotenvパッケージを使用して、シークレットファイルを読み取って解析します。シークレットファイルに問題がある場合は、公式のパッケージドキュメントを参照してください。
メタデータをエミュレートする
コマンドラインランナーはDroneサーバと通信しないため、通常パイプラインで利用できるリポジトリへのアクセス、メタデータのコミットおよびビルドはありません。
コマンドラインフラグと環境変数を使用して、リポジトリとビルド情報をコマンドラインランナーに渡すことで、リポジトリメタデータをエミュレートできます。
- コマンドの例は、ブランチを設定します。
$ drone exec --branch=master
- コマンドの例は、ビルドイベントを設定します。
$ drone exec --event=pull_request
- 環境変数を使用したコマンドセットメタデータの例:
$ DRONE_SYSTEM_HOST=drone.company.com drone exec
トラステッドモード
パイプラインがトラステッドモードを必要とする構成を使用している場合は、 --trusted
フラグを使用してローカルでトラステッドモードを有効にできます。トラステッドモードは、パイプラインに昇格された特権をホストマシンに付与します。注意して使用してください。
- コマンドの例は、トラステッドモードを有効にします。
$ drone exec --trusted
ローカルvsリモート
コマンドラインランナーはサーバ環境をエミュレートするために合理的な努力をしますが、実行に影響を与える可能性のある顕著な違いがあります。
- サーバはリポジトリのクローンを作成し、コマンドラインランナーは現在の作業ディレクトリをマウントします。作業ディレクトリにすでに存在するファイルまたは依存関係も、パイプラインにマウントされます。
- サーバは、より多くのデータ(コミットの詳細、リポジトリの詳細など)にアクセスできます。サーバ環境をより厳密にエミュレートするには、このデータをコマンドラインランナーに提供する必要があります。
- サーバはoauthクレデンシャルにアクセスでき、これらのクレデンシャルを使用してnetrcファイルを生成します。サーバー環境をより厳密にエミュレートするには、これらの資格情報をコマンドラインランナーに提供する必要があります。
- サーバは、リポジトリ、組織、および暗号化されたシークレットにアクセスできます。コマンドラインランナーは、サーバ環境に保存されているシークレットまたは復号化キーにアクセスできません。