3.9. 追加のカスタムビルドの手順
定義ファイルの additional_build_steps セクションで、任意のビルドフェーズのカスタムビルドコマンドを指定できます。これにより、ビルドフェーズをきめ細かく制御できるようになります。
prepend_ および append_ コマンドを使用して、メインのビルドステップの実行前または実行後に実行されるディレクティブを Containerfile に追加します。コマンドは、ランタイムシステムに必要なルールに準拠する必要があります。
additional_build_steps で使用できる値のリストは、次の表を参照してください。
| 値 | 説明 |
|---|---|
|
| ベースイメージをビルドする前にコマンドを挿入できます。 |
|
| ベースイメージをビルドした後にコマンドを挿入できます。 |
|
| galaxy イメージをビルドする前に挿入できます。 |
|
| galaxy イメージをビルドした後に挿入できます。 |
|
| Python ビルダーイメージをビルドする前に、コマンドを挿入できます。 |
|
| Python ビルダーイメージをビルドした後に、コマンドを挿入できます。 |
|
| 最終イメージをビルドする前に挿入できます。 |
|
| 最終イメージをビルドした後に挿入できます。 |
additional_build_steps の構文は、複数行の文字列とリストの両方をサポートしています。以下の例を参照してください。
例3.1 複数行の文字列エントリー
prepend_final: | RUN whoami RUN cat /etc/os-release
prepend_final: |
RUN whoami
RUN cat /etc/os-release
例3.2 リストエントリー
append_final: - RUN echo This is a post-install command! - RUN ls -la /etc
append_final:
- RUN echo This is a post-install command!
- RUN ls -la /etc
例3.3 任意のファイルを実行環境にコピーする
additional_build_files セクションを使用すると、rootCA.crt をビルドコンテキストディレクトリーに追加できます。このファイルをビルドコンテキストディレクトリーにコピーすると、ファイルをビルドプロセスで使用できるようになります。ファイルを使用するには、additional_build_steps セクションの prepend_base ステップで指定した COPY ディレクティブを使用して、ビルドコンテキストディレクトリーからファイルをコピーします。コピーしたファイルに基づいて任意のアクションを実行できます。たとえば、この例では、RUN update-ca-trust を実行して CA 証明書の動的設定を更新します。
3.9.1. 環境変数を使用した実行環境の構築 リンクのコピーリンクがクリップボードにコピーされました!
次のサンプルファイルでは、ビルドプロセスに必要な可能性のある環境変数を指定しています。
この機能を実現するために、additional_build_steps セクションの prepend_base ステップで ENV 変数定義を使用します。
—
additional_build_steps:
prepend_base:
- ENV FOO=bar
- RUN echo $FOO > /tmp/file1.txt
—
additional_build_steps:
prepend_base:
- ENV FOO=bar
- RUN echo $FOO > /tmp/file1.txt
ビルドプロセスの後の段階でも同じ環境変数を使用できます。
3.9.2. Galaxy 設定の環境変数を使用した実行環境の構築 リンクのコピーリンクがクリップボードにコピーされました!
Ansible Builder スキーマ 3 を使用すると、カスタムの Galaxy 設定を指定するなど、複雑な手順を実行できます。この方法を使用すると、認証トークンなどの機密情報を、最終的な実行環境イメージに漏洩することなく、実行環境ビルドに渡すことができます。
次の例では、Ansible Galaxy Server 環境変数を使用します。
ENV ディレクティブを使用して、ANSIBLE_GALAXY_SERVER_LIST、ANSIBLE_GALAXY_SERVER_AUTOMATION_HUB_URL、ANSIBLE_GALAXY_SERVER_AUTOMATION_HUB_AUTH_URL などの環境変数を提供できます。詳細は、Ansible ドキュメントの Galaxy User Guide を参照してください。
セキュリティー上の理由から、ANSIBLE_GALAXY_SERVER_AUTOMATION_HUB_TOKEN に機密情報を保存しないでください。ARG ディレクティブを使用すると、ユーザーからの機密情報を入力として受け取ることができます。
ansible-builder コマンドを呼び出すときに -build-args を使用すると、この情報を提供できます。