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" } } } }
関連ページ:

セルフホスト型ワーカー
A self-hosted worker is a lightweight agent that you can run on your own machine on Windows, Linux, or macOS. The self-hosted worker connects to Space Automation, gets jobs and the project source code, runs the jobs, and reports results back to Space...

実行環境
Space Automation の実行環境は、ワーカーのコンセプトに基づいています。ワーカーは、Space Automation に接続し、ジョブとソースコードを取得し、ジョブを実行して、結果を Space にレポートする軽量エージェントです。ワーカーは、Space Automation Cloud の仮想マシン、独自のセルフホストマシン、および Docker コンテナーで実行できます。次の表は、考えられる実行環境をまとめたものです。Space クラウドワーカー (オンプレミスの Space で...

プロジェクトに参加する
あるプロジェクトに貢献を開始したい場合は、そのプロジェクトに参加する必要があります。つまり、そのプロジェクトのメンバーになる必要があります。貢献しようとしているプロジェクトに移動します。すでにメンバーである場合は、プロジェクトのページのプロジェクトメンバーにリストされます。そうでない場合は、プロジェクト管理者に連絡してメンバーシップを依頼してください。プロジェクト管理者を確認するには、プロジェクトページでメンバーウィジェットをクリックします。プロジェクトを探す:すべてのプロジェクトは名前で見つ

Helm チャート
前提条件 Helm チャートは、プロジェクトソースの別のディレクトリに保存されます。チャートを Space パッケージに公開する場合は、プロジェクトに Docker レジストリがあることを確認してください。対象イメージ Helm を含む任意のイメージ。例: アルパイン /helm。Helm チャートを操作する場合の一般的な CI/CD タスクは、それをレジストリに公開することです。Space Automation を使用すると、チャートを Space Package または任意の外部レジストリに公開でき...