Jenkinsを使用したDockerコンテナの自動デプロイ
このページでは、OutSystemsを使用したコンテナホストの設定の例を示します。この情報は社内用およびテスト用としてのみ使用してください。読者は、ここで扱うテクノロジーに精通しているものとします。
このページに示した自動化プロセスによって、デプロイされたOutSystemsアプリケーションでのコンテナの実行が保証され、コンテナを「外部」からアクセス可能にする書き換えルールが作成されます。
詳細については、OutSystemsのコンテナに関するオンラインヘルプをご覧ください。特に、ネットワークおよびデプロイゾーンとDockerコンテナへのパブリッシュに関する部分をご覧ください。
1. サーバーを設定する
手順に従うには、リバースプロキシとしてIISが搭載された2台のサーバー(OutSystems PC + リバースプロキシとしてIISが搭載されたコンテナPC)、またはリバースプロキシとしてNGINXを使用する場合は3台のサーバー(OutSystems PC + コンテナPC + NGINXが搭載されたリバースプロキシ)が必要です。
OutSystems PC
- Windows Server 2016
- OutSystems Platform Server(コンテナにデプロイできるサンプルアプリを含む)
リバースプロキシオプション1 - IIS
この設定を行うには、Windowsサーバーが1台追加で必要です。これが作業用のテストシナリオを最速で設定するための方法です。手順については、「リバースプロキシとしてのIISの設定」のドキュメントをご覧ください。
リバースプロキシオプション2 - NGINX
これは、優れた拡張性と柔軟性を備えた高度なシナリオです。この設定を行うには、サーバーが2台追加で必要です。
- コンテナ用のWindowsサーバー
- NGINX用のLinuxサーバー
手順については、「リバースプロキシとしてのNGINXの設定」のドキュメントをご覧ください。
デプロイスクリプト
以下の2つのスクリプトも必要です。
- OutSystems Docker自動化スクリプト - パイプラインでアプリをデプロイするために使用します。
- Jenkinsパイプラインスクリプト - パイプラインを構成するために使用します。
この例のルートフォルダ(C:\jenkins
)にあるこれらのリポジトリをご覧ください。
2. ファイルアクセスを構成する
OutSystems PCがアプリケーションバンドルと構成を2つのフォルダに書き込み、コンテナPCから結果を読み取ることができる必要があります。これを実現する最も簡単な方法は、コンテナPCのローカルにフォルダを作成し、(少なくとも、そのPCで実行されているIISと同じユーザーの読み取り・書き込みアクセス権を使用して)OutSystems PCがそれらのフォルダにアクセスできるネットワーク共有を作成することです。 以下のローカルフォルダとネットワーク共有を作成する必要があります。
- Output Files To(またはTarget Path): 作成場所は
C:\jenkins\bundles
、ネットワーク共有は\\containers.domain.example.com\jenkins\bundles
- Result(またはResult Path): 作成場所は
C:\jenkins\results
、ネットワーク共有は\\containers.domain.example.com\jenkins\results
- Output Config Files To(またはConfig Path): 作成場所は
C:\jenkins\configs
、ネットワーク共有は\\containers.domain.example.com\jenkins\configs
以下は、結果ファイルの概要です。
ContainerBuild
:.preparedone
ContainerRun
:.deploydone
ContainerRemove
:.undeploydone
UpdateConfigurations
:.configsdone
強調された部分は、後で行う構成です。パスの詳細については、「デプロイゾーンを構成する」のセクションをご覧ください。
3. Docker自動化スクリプトをコピーする
OutSystems自動化スクリプトをコンテナPCのC:\jenkins\
にコピーします。相対パスを変更しないでください。<カスタムフォルダ>
内にフォルダを配置する場合、フォルダが<カスタムフォルダ>\modules
、<カスタムフォルダ>\utils
などになるようにしてください。
このスクリプトは、この後に設定するパイプラインで使用します。
4. Jenkinsを設定する
以下は、テスト用デプロイシナリオでJenkinsを使用するための基本的な構成手順です。
-
Jenkinsの64ビットバージョンが実行中であることを確認します。[Manage Jenkins] > [System Information]に移動して、java.vm.nameの値が「64-Bit」であることを確認します。これ以外の場合、次へ進む前に、JenkinsがJava x64を使用するように構成する必要があります。
-
PowerShell Pluginをインストールします。これを行うには、[Manage Jenkins] > [Plugin Manager] > [Available]タブに移動し、「PowerShell」を検索し、[Download now and install after restart]を確認して選択します。
-
ビルドトリガーの匿名での呼び出しを許可します。[Manage Jenkins] > [Configure Global Security]に移動し、Jenkins認証を「Anyone can do anything」に設定します。これには、ビルドトリガーを追加の認証ヘッダーなしで呼び出すことができるというメリットがあり、現在のシナリオに適しています。ただし、本番ではこのレベルのアクセス制御オプションを使用しないでください。
-
OutSystemsプラットフォームの
private.key
へのコンテナのアクセスを許可します。コンテナにはprivate.key
がアクセスできるボリュームが必要です。これを適切な場所にコピーします。ここでは、コンテナPCのC:\jenkins\secrets
にprivate.key
がコピーされることを想定しています。ほとんどの場合、private.key
の場所はC:\Program Files\OutSystems\Platform Server
です。
5. パイプラインを設定する
各デプロイオペレーション(ビルド、実行、削除、更新)用に1つずつ、合計4つのパイプラインを構成します。最初にすべてのパイプラインに共通する構成を行い、その後に個別のパイプラインの詳細を設定します。
-
フォルダを作成して「DockerDeployment」という名前を付けます。[Jenkins] > [New Item]に移動します。[Folder]オプションを選択し、名前を入力して[OK]をクリックします。これをすべてのパイプラインで使用します。こうすることで整理された状態を保つことができます。
-
パイプラインを作成します。[Jenkins] > [DockerDeployment]([Builds]ビュー)に移動します。[New Item]をクリックし、[Pipeline]を選択し、オペレーションに関連する名前を入力して[OK]をクリックします。ContainerBuild、ContainerRun、ContainerRemove、UpdateConfigurationsのように、アクションを示す名前を使用することを推奨します。
-
必須パラメータ(Address、ApplicationName、ApplicationKey、OperationId、TargetPath、ResultPath、ConfigPath、ModuleNames)を追加します。[This project is parameterized]オプションにチェックを付け、[Add Parameter]、[String Parameter]の順に選択します。これにより、パイプラインのパラメータを作成できます。その他のパラメータについてもこれを行います。忘れずに[Apply]をクリックしてから次に進み、変更を保存してください。
-
パラメータHostingTechnologyを追加します。これにより、デプロイプロセスで使用される_コンテナ自動化モジュール_が設定されます。デフォルト値を、所定のリバースプロキシシナリオ(IISの場合は「
DockerEEPlusIIS
」、NGINXの場合は「DockerEEPlusNGiNX
」)に該当するものに設定します。 -
[Build Triggers]セクションの[Trigger builds remotely (e.g. from scripts)]オプションにチェックを付け、[Authentication Token]に入力します。設定例では、任意の値を使用できます。これは、URLトリガーの呼び出しに必要なトークンパラメータに使用される値です。すべてのパイプラインに共通する手順は、これで最後です。次に、各パイプラインに固有のパイプラインスクリプトを追加します。
-
ContainerRunパイプラインでは、SecretPathとPlatformServerFQMNの2つのパラメータを追加する必要があります。これらはそれぞれ、
private.key
を配置したDocker PCのローカルフォルダ(例:C:\jenkins\secrets\
)とOutSystems PCの完全修飾名(例: site.domain.example.com)を表します。これらの各パラメータのデフォルト値を所定のシナリオに該当するものに設定します。 -
4つの各パイプラインについて、[Pipeline]セクションで[Pipeline Script]を選択します。各パイプラインに対応するパイプラインスクリプトをコピーして[Script]テキスト領域に貼り付け、インポートパスを所定のシナリオに該当するものに変更します。[Save]をクリックします。
6. デプロイゾーンを構成する
自動化インフラができたため、これを利用したデプロイゾーンを作成できます。[Service Center] > [Administration] > [Deployment Zones] > ゾーン名にある構成を確認します。
- Name - デプロイゾーンに付ける名前(例: Container Zone)
- Deployment Zone Address - デプロイゾーンの公開エンドポイントの完全修飾ネットワーク名(例:
containers.domain.example.com
) - Output Files To - OutSystems PCがバンドルを配置するコンテナPC上のネットワーク共有フォルダ(例:
\\containers.domain.example.com\jenkins\bundles
) - Result - OutSystems PCが結果ファイルの場所として想定するコンテナPC上のネットワーク共有フォルダ(例:
\\containers.domain.example.com\jenkins\results
) - Output Config Files To - OutSystems PCがアプリケーションの構成ファイルを配置するコンテナPC上のネットワーク共有フォルダ(例:
\\containers.domain.example.com\jenkins\configs
) - Container Build Trigger URL - 構成したコンテナ作成用Jenkinsパイプラインのビルドトリガー(例:
http://containers.domain.example.com:8080/job/DockerDeployment/job/ContainerBuild/buildWithParameters?token=YW1hemluZyE=
) - Container Run Trigger URL - 構成したコンテナ実行用Jenkinsパイプラインのビルドトリガー(例:
http://containers.domain.example.com:8080/job/DockerDeployment/job/ContainerRun/buildWithParameters?token=YW1hemluZyE=
) - Update Configurations Trigger URL - 構成した構成更新用Jenkinsパイプラインのビルドトリガー(例:
http://containers.domain.example.com:8080/job/DockerDeployment/job/UpdateConfigurations/buildWithParameters?token=YW1hemluZyE=
) - Container Remove Trigger URL - 構成したコンテナ削除用Jenkinsパイプラインのビルドトリガー(例:
http://containers.domain.example.com:8080/job/DockerDeployment/job/ContainerRemove/buildWithParameters?token=YW1hemluZyE=
)
7. パイプラインをテストする
これでJenkinsの構成は完了しました。デプロイゾーン用に構成したOutSystemsアプリケーションをデプロイしてみましょう。これにはService Centerを使用します。[Jenkins] > [DockerDeployment](この例の場合)でパイプラインのステータスを確認します。ビルドごとに詳細なログがあります。