ドローンCIドッカー拡張機能でラップトップに継続的インテグレーションをもたらします

継続的インテグレーション (CI) は、クラウド ネイティブ アプリケーション開発の重要な要素です。 コンテナがクラウドネイティブアーキテクチャの基盤を形成するため、開発者はバージョン管理システムをCIツールと統合する必要があります。 

継続的インテグレーションにはクラウドベースのインフラストラクチャが必要であるという神話があります。 CI は本番リリースには適していますが、開発者はパイプラインをチームと共有したり、ラップトップで継続的インテグレーション (CI) を実行したりする前に、パイプラインを構築してテストする必要があります。 それは今日本当に可能ですか? 

ドローン CI パイプラインの紹介

Drone CI と呼ばれるオープンソースプロジェクトがそれを実現します。25,700 を超える GitHub スターと 300 人以上のコントリビューターを擁する Drone は、クラウドネイティブのセルフサービス CI プラットフォームです。 Drone CIは、クラウドネイティブアーキテクチャのスケーリングとフォールトトレランスの特性を活用する成熟したコンテナベースのシステムを提供します。 これは、シンプルで分離された宣言型のコンテナーに適したパイプラインを構築するのに役立ちます。 

Drone はコンテナベースのパイプラインエンジンであり、既存のコンテナをパイプラインの一部として実行したり、ビルドロジックを Drone プラグインと呼ばれる再利用可能なコンテナにパッケージ化したりできます。 

ドローンプラグインは必要に応じて構成可能であり、組織内または一般的なコミュニティにコンテナを配布できます。

Docker デスクトップからのドローン CI パイプラインの実行

分散型ツールを使用する開発者にとって、マイクロサービス アプリケーションの構築とデプロイのタスクは途方もないものです。 これらの環境でこれらのアプリをインストール、管理、使用するのは難しいです。 そこで、Docker拡張機能の出番です。 Docker 拡張機能を使用すると、開発者ツールが Docker Desktop に直接統合され、管理ワークフローが合理化されます。 開発プロセスの最適化と変革が簡単になります。 

Docker Desktop の Drone CI 拡張機能は 、開発マシンに CI をもたらします。 ドローン CI パイプラインを Docker デスクトップにインポートし、ローカルで実行できるようになりました。 また、パイプラインの特定のステップの実行、実行結果の監視、ログの検査を行うこともできます。

ドローン CI パイプラインの設定

このガイドでは、Docker デスクトップでドローン CI パイプラインを最初から設定する方法について説明します。 

まず、ドローン CI 拡張機能を Docker デスクトップ内にインストールします。 次に、ドローンパイプラインを発見する方法を学習します。 3 つ目は、Visual Studio Code でドローン パイプラインを開く方法であることを示しています。 最後に、CI パイプラインを信頼モードで実行し、ホスト マシンで昇格された特権を付与する方法について説明します。 飛び込みましょう。

前提 条件

開始する前に、 Docker Desktop 4.8 以降をダウンロード する必要があります。 OSに適したバージョンを選択してからインストールしてください。 

次に、Docker デスクトップにアクセスして、Docker 拡張機能機能が有効になっていることを確認します。 [設定]歯車>[拡張機能]タブをクリックし>[Docker拡張機能を有効にする]チェックボックスをオンにします。

拡張機能の設定を有効にする

ドローン CI ドッカー拡張機能のインストール

Drone CI は現在拡張機能マーケットプレースでは利用できないため、CLI からダウンロードする必要があります。 ターミナルを起動し、次のコマンドを実行してドローンCI拡張機能をインストールします。

docker extension install drone/drone-ci-docker-extension:latest

ドローンCI拡張機能は、Dockerダッシュボードの左側のサイドバーの[拡張機能]見出しの下に表示されます。

ドローンciサイドバー

ドローンパイプラインのインポート

[パイプラインのインポート] オプションをクリックして、Drone CI パイプライン (drone.yml ファイル) があるホスト ファイル システム パスを指定できます。 ドローン CI パイプラインを初めて使用する場合は、 GitHub リポジトリの例を使用できます。

上記の記録では、 サンプル を使用して long-run-demo 、実行時間の長いスリープ コマンドを実行するローカル パイプラインを実行しました。これは、Docker コンテナー内で発生します。

kind: pipeline
type: docker
name: sleep-demos
steps: 
  - name: sleep5
    image: busybox
    pull: if-not-exists
    commands:
    - x=0;while [ $x -lt 5 ]; do echo "hello"; sleep 1; x=$((x+1)); done
  - name: an error step
    image: busybox
    pull: if-not-exists
    commands:
    - yq --help

このパイプライン YAML ファイルは、 ドローン CI GitHub ページからダウンロードできます。

ファイルは、 pipeline CI パイプラインを定義するオブジェクトで始まります。 この属性は、 type そのパイプラインの実行中に優先するランタイムを定義します。 

ドローンは、  Dockerkubernetes などの多数の ランナー をサポートしています。拡張機能は現在、パイプラインのみをサポートしています docker
各パイプライン step は、対応する image image 属性の一部として定義された Docker コンテナーを step スピンアップします。

各ステップでは、という commands属性を定義します。 これは、ビルドの一部として実行するシェルコマンドのリストです。 定義されたコマンドのリストはシェルスクリプトに変換され、Dockerコンテナの ENTRYPOINT. いずれかのコマンド (この場合は、見つからないコマンドなど) が 0 以外の終了コードを返す場合、 yq パイプラインは失敗して終了します。

ドローンパイプライン一覧
ドローンステージ

ドローン CI による VS Code でのパイプラインの高速化

Visual Studio Code (VS Code) は、軽量で非常に人気のある IDE です。 JavaScript、TypeScript、Node.jsをサポートしています。 VS Code には、他の多くの言語とランタイム用の豊富な拡張機能エコシステムもあります。 

VS Code でドローン パイプライン プロジェクトを開くには、Docker デスクトップ内からわずか数秒で完了します。

パイプラインプロジェクトを開く

この機能を使用すると、パイプラインをすばやく表示し、ステップを追加、編集、または削除して、Docker Desktop から実行できます。 これにより、新しいパイプラインの変更をテストしながら、より迅速に反復できます。

CI パイプラインでの特定のステップの実行

ドローン CI 拡張機能を使用すると、CI パイプライン内の個々のステップをいつでも実行できます。 この機能をよりよく理解するために、次の ドローンYAMLファイルを調べてみましょう。

kind: pipeline
type: docker
name: sleep-demos
steps: 
  - name: sleep5
    image: busybox
    pull: if-not-exists
    commands:
    - x=0;while [ $x -lt 5 ]; do echo "hello"; sleep 1; x=$((x+1)); done
  - name: an error step
    image: busybox
    pull: if-not-exists
    commands:
    - yq --help

この例では、次のように sleep5 定義された最初のパイプライン ステップで、シェル スクリプト (echo “hello”) を 5 秒間実行してから停止できます ( error step.次のビデオは、パイプライン内で特定の sleep-demos ステージを実行する方法を示しています。

信頼モードでのステップの実行

場合によっては、昇格された特権で CI パイプラインを実行する必要があります。 これらの特権により、ユーザーは標準ユーザーよりも多くのことを体系的に実行できます。 これは、コマンド内で docker run パラメーターを --privileged=true 渡す方法と似ています。 

実行する docker run --privilegedと、Docker はすべてのホストデバイスへのアクセスを許可し、AppArmor または SELinux で構成を設定します。 これらの設定により、ホスト上のコンテナーの外部で実行されているプロセスとほぼ同等のホストへのアクセス権がコンテナーに付与される場合があります。

ドローンのモードは trusted 、ホスト マシンで昇格された特権でパイプライン コンテナーを実行するようにコンテナー ランタイムに指示します。 とりわけ、 trusted モードは次のことに役立ちます。

  • Docker ホスト ソケットをパイプライン コンテナーにマウントする
  • ホスト パスを Docker コンテナーにマウントする

環境変数ファイルを使用したパイプラインの実行

ドローン CI 拡張機能を使用すると、個々のビルド ステップの環境変数を定義できます。 これらはパイプライン ステップ内で設定できます。環境変数を実行中のコンテナに渡す方法を提供すると同様に docker run 、Droneを使用すると、使用可能な環境変数をビルドに渡すことができます。 次の ドローン YAML ファイルについて考えてみます。

kind: pipeline
type: docker
name: default
steps: 
  - name: display environment variables
    image: busybox
    pull: if-not-exists
    commands:
    - printenv

ファイルは、 pipeline CI パイプラインを定義するオブジェクトで始まります。 この属性は、そのパイプラインの実行中に優先するランタイム (この場合は type Docker) を定義します。 このセクションは platform 、ターゲット OS とアーキテクチャ ( など arm64) を構成し、パイプラインを適切なランナーにルーティングするのに役立ちます。 指定しない場合、システムはデフォルトで Linux amd64になります。 

このセクションでは steps 、一連のシェルコマンドを定義します。 これらのコマンドは、 busybox Docker コンテナー ENTRYPOINT内で . 示されているように、 my-env ファイルで次の環境変数を宣言している場合、コマンドは環境変数を出力します。

DRONE_DESKTOP_FOO=foo
DRONE_DESKTOP_BAR=bar

好みの環境ファイルを選択し、CI パイプラインを実行できます (次の図を参照)。

パイプライン環境ファイル

CI パイプラインをインポートしようとすると、すべての環境変数を出力できます。

シークレット ファイルを使用したパイプラインの実行

リポジトリシークレットを使用して、パスワード、トークン、sshキーなどの機密情報を保存および管理します。 この情報をシークレットとして格納することは、プレーンテキスト構成ファイル内に格納するよりも安全であると考えられています。 

手記: ドローンは、シークレットから使用されるすべての値をマスクし、標準出力とエラーに出力します。

Drone CI 拡張機能を使用すると、次に示すように、好みのシークレット ファイルを選択して CI パイプライン内で使用できます。

シークレット ファイル

パイプラインを削除する

CI パイプラインは 1 つの手順で削除できます。 1 つ以上の Drone パイプラインを選択し、ダッシュボードの右側にある赤いマイナス ("-") ボタンをクリックして削除します。 このアクションでは、パイプラインは Docker Desktop から削除されるだけで、ファイルシステムからは削除 されません

すべてのパイプラインを一括削除する

一括削除

1 つのパイプラインを削除する

1 つのパイプラインを削除する

結論

Drone は、多忙な開発チームがワークフローを自動化できるようにする、モダンでパワフルでコンテナに適した CI です。 これにより、ビルド、テスト、リリースのサイクルが大幅に短縮されます。 Drone サーバーを使用すると、開発チームはクラウド アプリを構築してデプロイできます。 これらは、Kubernetes のようなクラウドネイティブ アーキテクチャのスケーリングとフォールト トレランスの特性を活用します。 

Drone のドキュメント を確認して、マシンで CI の使用を開始してください。Drone CI 拡張機能を使用すると、開発者は CI システムの場合と同様に、ドローン CI パイプラインをローカルで実行できるようになりました。

Docker拡張機能をさらに深く掘り下げたいですか? イントロドキュメントを確認するか、 独自の拡張機能を構築する方法を見つけてください。