コマンドラインランナー

Updated 2 years ago by Admin

コマンドラインツールを使用して、開発およびデバッグの目的で、ラップトップまたはパーソナルコンピューター上でローカルにDockerパイプラインを実行できます。これは、私のコンピューターでは正常に機能するという一般的な苦情に対する私たちの答えです。


インストール

  • Homebrewを使用してOSXにコマンドラインツールをインストールします。
    $ brew install drone-cli
  • Scoopを使用してWindowsにコマンドラインツールをインストールします。
    $ scoop install drone

使用法

コマンドラインランナーには、Dockerが正常にインストールされている必要があります。Droneは、ローカルのDockerデーモンを使用して、ホストマシン上でローカルにパイプラインを実行します。ローカル実行には、Droneサーバとの通信はありません。

  1. .drone.ymlファイルが配置されているgitリポジトリのルートディレクトリに移動します。テスト目的で使用できる基本的な構成は次のとおりです。
    kind: pipeline
    type: docker
    name: default

    steps:
    - name: test
    image: alpine
    commands:
    - echo hello
    - echo world
  2. コマンドラインからパイプラインを実行します。
    $ drone exec
  3. このコマンドは、分析のためにパイプラインログを端末にストリーミングします。パイプラインに障害が発生した場合、コマンドはゼロ以外の終了コードを返します。
    $ 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

シークレットをエミュレートする

コマンドラインランナーには、サーバに保存されているシークレットへの読み取りアクセス権がありません。テキストファイルを介してコマンドラインランナーにシークレットを渡すことにより、ローカルパイプラインにシークレットを提供できます。

  1. シークレットから供給された、ユーザー名とパスワードの環境変数を必要とするパイプラインの例。
    kind: pipeline
    type: docker
    name: default

    steps:
    - name: test
    environment:
    USERNAME:
    from_secret: USERNAME
    PASSWORD:
    from_secret: PASSWORD
  2. キー値形式で1行に1つずつ定義されたシークレットを含む単純なテキストファイルを作成します。このデモでは、ファイルにsecrets.txtという名前を付けます。
    USERNAME=root
    PASSWORD=password
  3. パイプラインを実行するときに、コマンドラインフラグを介してシークレットファイルを提供します。
    $ 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ファイルを生成します。サーバー環境をより厳密にエミュレートするには、これらの資格情報をコマンドラインランナーに提供する必要があります。
  • サーバは、リポジトリ、組織、および暗号化されたシークレットにアクセスできます。コマンドラインランナーは、サーバ環境に保存されているシークレットまたは復号化キーにアクセスできません。


How did we do?