|
まず、私の個人的な意見を述べさせてください。Daggerは、特に開発者にとって非常に便利ですが、CUE言語の知識が必要となるため、参入障壁はある程度あります。しかし、まだDevOpsにおいて破壊的な製品ではありません。 Dockerの創業者ソロモン・ハイクス氏は先日、新製品「Dagger」のリリースを発表しました。これは、開発者がDevOpsプロセスで直面するいくつかの問題を解決するために設計された新しいDevOpsプラットフォームです。DaggerはすでにRedpoint Venturesが主導するシリーズAラウンドで2,000万ドルの資金調達を完了しており、GitHubの元CEOナット・ファイアマン氏、Red Hatの元CTOブライアン・スティーブンス氏、Redditの元CEOエラン・パオ氏といった著名人が参加しています。 Daggerは、DevOps開発者がCI/CDパイプラインをCUEの宣言型モデルとして記述するのに役立ちます。開発者はこれに基づいて、パイプラインを記述し、純粋なコードで実装されたパイプラインの様々な部分を接続できます。 インストールmacOS を使用しており、Homebrew がインストールされている場合は、次のコマンドを使用してワンクリックで Dagger をインストールできます。 brew install dagger / tap / dagger 上記のコマンドは、Dagger を /opt/homebrew/bin ディレクトリにインストールします。 タイプダガー Homebrew または別のシステムがインストールされていない場合、または特定のバージョンの Dagger をインストールする場合は、次のコマンドを使用してインストールできます。 curl -L https://dl.dagger.io/dagger/install.sh | DAGGER_VERSION=0.2.4 sh Dagger はタスクを実行するために Docker を使用するため、実際に使用するには Docker Engine をインストールして実行する必要があります。 例ここで、公式の todo サンプル アプリケーションを使用して、Dagger を使用して CI/CD パイプラインを実行する方法を説明します。 まず、サンプル アプリケーション コードを取得します。 git クローンhttps://github.com/dagger/dagger サンプル アプリケーション コードのルート ディレクトリに移動し、`dagger do build` コマンドを実行して CI/CD パイプラインを実行します。 cd pkg / universe .dagger .io / examples / todoapp タスクを初めて実行する際は、キャッシュがないため、すべての依存関係をインストールする必要があります。そのため、このサンプルアプリケーションのテストビルドは完了するまでに時間がかかります。 [ ✔ ] クライアント.filesystem . "./" .read 0.4 秒 上記の結果は、dagger-buildkitd というローカル コンテナーで実行されるビルド コマンドの実行結果を示しています。 これは、Dagger が Docker の実行エンジンである BuildKit 内でタスクを実行することを証明しています。 これは静的アプリケーションなので、最終的に生成されたファイルをブラウザで開くことができます。ここでは、最終的なビルド結果をホストマシンの `_build` ディレクトリにコピーするように定義しています。`open _build/index.html` コマンドを実行すると、アプリケーションをプレビューできます。 これで、特定のアプリケーション依存関係をインストールする必要がなくなりました。Daggerがこれらの中間ステップをすべて管理します。Daggerを使えば、アプリケーションの結果を確認するために毎回コードをコミットしてプッシュする必要はありません。さらに、各アクションはキャッシュされるため、後続の実行が非常に高速になります。 たとえば、todoapp ディレクトリで、src/components/Form.js の 25 行目を編集し、その内容を「今日何をする必要がありますか?」に変更してファイルを保存し、ローカルで再度ビルド コマンドを実行します。 ダガービルド パイプライン全体の実行時間が大幅に短縮され、結果が正しく出力されていることがわかります。ブラウザを更新して、結果が変わったかどうかを確認してください。 パイプラインの定義Daggerはパイプラインの定義にCUE言語を使用するため、まずこの言語を理解する必要があります。CUE言語の基本的な使い方については、先ほど紹介したCUE言語の使い方を参照してください。 ここでのサンプル アプリケーションのパイプラインの定義は次のとおりです。 パッケージtodoapp 上記のCUEファイルからわかるように、Daggerのパイプラインは#Planから始まります。#Plan内では、以下の処理が可能です。 クライアントのファイル システムと対話します。
上記で定義された NETLIFY_TOKEN などの環境変数を読み取ります。 テスト、ビルド、デプロイなどのアクションを宣言します。アクションの名前は任意です。 上記で定義したパイプラインの全体的なアーキテクチャを以下に示します。クライアント部分はクライアント関連のやり取りを定義し、アクション部分はパイプラインのアクションを定義します。 ダガー. #Plan & { 先ほど `dagger do build` コマンドを実行すると、次の出力が生成されました。 [ ✔ ] クライアント.filesystem . "./" .read 0.2 秒 `build` アクションのみを実行したため、`deploy` 関連の情報は表示されませんでした。`dagger do` の後にアクション名を指定することで、特定のアクションを実行できます。`build` アクションの入力は `test.output` なので、`test` も実行されます。同様に、`test` アクションの入力は `deps` の出力なので、このアクションも実行されます。 各アクションは基本的に、事前にインポートされたパッケージを使用して定義されます。例えば、`build` アクションの実行フローは、以下のコードに示すように、`bash.#Run` を使用して定義されています。 建てる: { そのため、`test` アクションの出力は、`input: test.output` を介してこの操作の入力として使用されます。次に、`mounts` を介してマウントディレクトリを指定し、キャッシュされた `nodemodules` ディレクトリの使用を許可します。`workdir` は作業ディレクトリを `/src` として指定し、`script` は実行するコマンドを `yarn run build` として指定します。全体的な定義構造は実際には `base.#Run` によって定義されており、これはパッケージ `universe.dagger.io/bash` を通じて理解できます。 開発者エクスペリエンスを向上させるため、DaggerはDagger Universeと呼ばれるツールキットライブラリをリリースしました。これにより、開発者は独自のDagger構成を柔軟にインポートできるようになります。前述のパイプラインの多くは、このツールキットで定義されています。 クライアントとのやり取り`dagger.#Plan` で定義できるプロパティや操作を確認するには、インポートされたパッケージ `dagger.io/dagger` のコード(https://github.com/dagger/dagger/blob/main/pkg/dagger.io/dagger/plan.cue にあります)を参照してください。このファイルでは、`client` を介したクライアント側インタラクションの有効化など、`#Plan` のすべてのプロパティが定義されています。 ファイルシステムへのアクセスclient.filesystem を使用してファイル システム アクセスを定義できます。 ダガー. #Plan & { ローカルソケットを取得します:ダガー. #Plan & { 環境変数環境変数は、ホスト マシンから文字列またはシークレットとして読み取ることができます。タイプを指定するだけで済みます。 ダガー. #Plan & { コマンドを実行場合によっては、クライアントで定義できるローカル コマンドを実行する必要があります。 ダガー. #Plan & { プラットフォーム情報を取得するプラットフォーム情報は client.platform を通じて取得できます。 ダガー. #Plan & { ビルドイメージ同様に、次のコードに示すように、Dagger を使用してコンテナ イメージをビルドすることもできます。 パッケージメイン ここでは universe.dagger.io/docker パッケージをインポートしたため、ビルドアクションは docker.#Dockerfile 定義を使用します。まず、client.filesystem を介して ./src ディレクトリの内容を読み取り、次にビルドアクションでビルドコンテキストを指定し、次に dockerfile.contents を介して使用する Dockerfile を直接定義します。もちろん、./src ディレクトリに Dockerfile ファイルを直接配置することもできます。 Dockerfile を直接使用するだけでなく、次のコードに示すように、CUE でイメージを直接ビルドすることもできます。これにより、上記と同じ結果が得られます。 パッケージメイン ここでは、docker.#Build という定義を使って設定します。steps はビルドステップを定義するために使用できます。docker.#Pull はベースイメージの指定に相当し、docker.#Copy はソースコードファイルのディレクトリをコピーします。docker.#Run はイメージのビルドコマンドを設定し、docker.#Set はイメージの起動コマンドを指定します。実際には、これは CUE を介して Dockerfile 宣言を実装することと同じです。 要約Daggerはパイプラインの設定にCUE言語を使用するため、当然ながら学習曲線は長くなります。しかし、CUEに慣れてしまえば、Daggerパイプラインの設定は非常に簡単であることがわかります。パッケージ定義を見るだけで、使い方を理解できるはずです。 Daggerのマーケティングスローガンは「CI/CDパイプラインのためのポータブル開発キット」です。DevOpsエンジニアは、どこでも実行できる堅牢なCI/CDパイプラインを迅速に構築し、開発環境とCI環境を統合し、パイプラインのローカルテストとデバッグを可能にします。これは間違いなく、Daggerのこれまでの最大の強みです。しかし、DevOps分野において破壊的な製品と言えるでしょうか?少なくとも今のところ、破壊的な側面は見られません。もちろん、Daggerはまだ非常に初期段階にあり、今後、さらに驚くべき機能が登場するかもしれません。 参考資料
|