Docker
前提条件
実行環境
|
Docker の CI/CD シナリオ
自動化された Docker ビルド : すべてのイメージの依存関係はすでに存在しており、必要なのは、Docker イメージをビルドして Space パッケージに公開することだけです。
ビルド前の依存関係の作成 : オートメーションジョブでは、イメージを構築して公開する前に、イメージの依存関係を作成する必要があります。
Docker ビルドを実行する方法
オートメーションでは、実行環境に応じて、Docker イメージを構築および公開するための 2 つの異なる方法が提供されます。
- job.host.dockerBuildPush
job.host.dockerBuildPush
を使用すると、セルフホストまたは Space Cloud ワーカーで Docker ビルドを実行できます。技術的には、これはdocker build
およびdocker push
コマンドを実行するjob.host.shellScript
ブロックの DSL ラッパーです。job.kaniko
に対する長所:Windows Docker イメージをビルドすることができます (ホストマシンが Windows 上で実行されている場合)。
イメージの依存関係の構築がより簡単かつ迅速になります – 必要なツールをすべてホストマシンにプレインストールできるため、同じ
host
ステップを使用してイメージを構築して公開するだけでなく、このイメージに必要なアーティファクトを構築することもできます。job.kaniko
の場合は、別の手順でイメージアーティファクトを構築し、ファイル共有経由でjob.kaniko
に提供する必要があります。Kaniko では、クラシックな Docker と比べて動作が異なる場合があります。
- job.kaniko
job.kaniko
を使用すると、プリインストールされた蟹子(英語)ツールを使用してコンテナーで Docker ビルドを実行できます。技術的には、これは特別なイメージに基づいてコンテナー内で実行されるjob.container
ステップです。host.dockerBuildPush
ではなくjob.kaniko
を使用する主な理由は、後者を使用できない場合です。例: 会社がオンプレミスの Space を使用しており、セルフホスト型ワーカーの使用を許可していない場合。
Docker イメージをビルドして Space パッケージに公開する
以下のジョブは、最初に ./docker/config/Dockerfile
で定義されたイメージを構築し、次に公開します。レジストリが同じプロジェクトに属している場合、オートメーションジョブでは Space Packages レジストリでの認証が必要ないことに注意してください。
イメージの依存関係を作成し、Docker イメージをビルドして Space パッケージに公開する
以下のジョブは、Gradle ビルドが ./build
ディレクトリにアーティファクトを生成することを意味します。次にジョブは、アーティファクトを含む Docker イメージを構築します。たとえば、アーティファクトは、Dockerfile
の ADD
ディレクティブを使用して追加できます (図示せず)。Dockerfile
はプロジェクトルートにあります。
job.kaniko
の場合、ジョブには 2 つのステップが含まれている必要があります。最初のステップ (job.container
) はアーティファクトを構築してファイル共有に配置し、2 番目のステップ (job.kaniko
) はファイル共有からファイルを取得してイメージを構築します。
Docker イメージをリモートレジストリに公開する (Docker Hub)
以下の例は、Docker Hub へのイメージの公開を示しています。ただし、認証が必要な外部レジストリの場合も手順は同じです。
認証が必要なレジストリに公開するには、スクリプトはまずこのリポジトリにログインする必要があります。これを行うには、スクリプト自体で docker login
を実行するか、レジストリへの接続を作成して dockerRegistryConnections
ブロックで使用します (推奨)。
Docker Hub で、Write 権限を持つアクセストークンを作成します(英語)。作成したトークンを安全な場所に保存します。
Docker Hub への接続を作成します。
目的のプロジェクトを開きます。
プロジェクトのサイドバーメニューで、設定を選択し、次に Docker レジストリ接続を選択します。
新規接続をクリックし、接続設定を指定します。
キー : ジョブ内でこの接続を参照するために使用する一意の接続名 (例:
docker_hub
またはsome_registry
)Docker レジストリサーバー : リモート Docker レジストリの URL。Docker Hub の場合は
index.docker.io
ですユーザー名とパスワード : 以前に作成したユーザー名とパスワード (トークン)。
プロジェクトの
.space.kts
を編集します。job("Publish to Docker Hub") { host("Build artifacts and a Docker image") { // Before running the scripts, the host machine will log in to // the registries specified in connections. dockerRegistryConnections { // specify connection key +"docker_hub" // multiple connections are supported // +"one_more_connection" } dockerBuildPush { labels["vendor"] = "mycompany" tags { +"myrepo/hello-from-space:1.0.${"$"}JB_SPACE_EXECUTION_NUMBER" } } } }
job.kaniko
はホストマシンから分離されたコンテナーで実行されるため、dockerRegistryConnections
を使用して Docker Hub にログインすることはできないことに注意してください。代わりに、config.json
ファイルで Docker Hub 資格情報を指定する必要があります。
Docker Hub で、Write 権限を持つアクセストークンを作成します(英語)。作成したトークンを安全な場所に保存します。
Space で、2 つのシークレットを作成します。
dockerhub_user
: Docker Hub ユーザー名。dockerhub_token
: 手順 1 で作成した Docker Hub トークン。
プロジェクトの
.space.kts
を編集します。job("Publish to Docker Hub") { kaniko("Docker build and push") { // assign project secrets to environment variables env["HUB_USER"] = Secrets("dockerhub_user") env["HUB_TOKEN"] = Secrets("dockerhub_token") // put auth data to Docker config beforeBuildScript { content = """ B64_AUTH=${'$'}(echo -n ${'$'}HUB_USER:${'$'}HUB_TOKEN | base64 -w 0) echo "{\"auths\":{\"https://index.docker.io/v1/\":{\"auth\":\"${'$'}B64_AUTH\"}}}" > ${'$'}DOCKER_CONFIG/config.json """ } build { labels["vendor"] = "mycompany" } //in push, specify repo_name/image_name push("myrepo/hello-from-space") { tags{ +"1.0.\$JB_SPACE_EXECUTION_NUMBER" } } } }
関連ページ:
![](https://resources.jetbrains.com/help/img/space/externalWorkerTags.png)
セルフホスト型ワーカー
セルフホスト型ワーカーは、Windows、Linux、macOS 上の独自のマシンで実行できる軽量エージェントです。セルフホスト型ワーカーは Space Automation に接続し、ジョブとプロジェクトのソースコードを取得してジョブを実行し、結果を Space にレポートします。セルフホスト型ワーカーを使用すると、コンテナーでは不可能な CI/CD ワークフローを実行できます。例:Windows 上で完全な .NET フレームワークアプリケーションを構築します。特定のハードウェアを使用する...
![](https://pleiades.io/icons/jetbrains_logo.png)
実行環境
Space Automation の実行環境は、ワーカーのコンセプトに基づいています。ワーカーは、Space Automation に接続し、ジョブとソースコードを取得し、ジョブを実行して、結果を Space にレポートする軽量エージェントです。ワーカーは、Space Automation Cloud の仮想マシン、独自のセルフホストマシン、および Docker コンテナーで実行できます。次の表は、考えられる実行環境をまとめたものです。Space クラウドワーカー (オンプレミスの Space で...
![](https://resources.jetbrains.com/help/img/space/projectMembers.png)
プロジェクトに参加する
あるプロジェクトに貢献を開始したい場合は、そのプロジェクトに参加する必要があります。つまり、そのプロジェクトのメンバーになる必要があります。貢献しようとしているプロジェクトに移動します。すでにメンバーである場合は、プロジェクトのページのプロジェクトメンバーにリストされます。そうでない場合は、プロジェクト管理者に連絡してメンバーシップを依頼してください。プロジェクト管理者を確認するには、プロジェクトページでメンバーウィジェットをクリックします。プロジェクトを探す:すべてのプロジェクトは名前で見つ
![](https://resources.jetbrains.com/help/img/space/secretsMavenRepo.png)
Helm チャート
前提条件 Helm チャートは、プロジェクトソースの別のディレクトリに保存されます。チャートを Space パッケージに公開する場合は、プロジェクトに Docker レジストリがあることを確認してください。対象イメージ Helm を含む任意のイメージ。例: アルパイン /helm。Helm チャートを操作する場合の一般的な CI/CD タスクは、それをレジストリに公開することです。Space Automation を使用すると、チャートを Space Package または任意の外部レジストリに公開でき...