継続的インテグレーション (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ダッシュボードの左側のサイドバーの[拡張機能]見出しの下に表示されます。
ドローンパイプラインのインポート
[パイプラインのインポート] オプションをクリックして、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
そのパイプラインの実行中に優先するランタイムを定義します。
ドローンは、 Docker 、 kubernetes などの多数の ランナー をサポートしています。拡張機能は現在、パイプラインのみをサポートしています 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 つのパイプラインを削除する
結論
Drone は、多忙な開発チームがワークフローを自動化できるようにする、モダンでパワフルでコンテナに適した CI です。 これにより、ビルド、テスト、リリースのサイクルが大幅に短縮されます。 Drone サーバーを使用すると、開発チームはクラウド アプリを構築してデプロイできます。 これらは、Kubernetes のようなクラウドネイティブ アーキテクチャのスケーリングとフォールト トレランスの特性を活用します。
Drone のドキュメント を確認して、マシンで CI の使用を開始してください。Drone CI 拡張機能を使用すると、開発者は CI システムの場合と同様に、ドローン CI パイプラインをローカルで実行できるようになりました。
Docker拡張機能をさらに深く掘り下げたいですか? イントロドキュメントを確認するか、 独自の拡張機能を構築する方法を見つけてください。