2018CI/CDとコンテナーの重要性CI/CD(継続的インテグレーション・デリバリー・デプロイ)は、ソフトウェアプロジェクトを成功させるための重要な要素であり、プロジェクトを進めるうえで明らかにメリットがあります。コンテナーは現在あらゆる場所で使用され、開発者から絶大な人気を博しています。CI/CDを使用するユーザーは、構築しているアプリケーションを自動的かつ継続的にテスト/検証できるので、アプリケーションの品質を確かなものにします。一方で、コンテナーは、企業が採用する標準的な手順に基づき、一度構築すれば「どこにでも」デプロイできるので、ソフトウェアの配布と実行をより俊敏に行えます。このような一般的なDevOpsプラクティスにより、「特定のマシンしか動作しない」という状況は、回避されます。結果として、サービスを市場投入するまでの時間が短縮されるとともに、デリバリーの頻度を高めることができます。Talendのシステム環境へどのように適応できるか?Talendでは、CI/CDとコンテナーの両方のメリットを利用できます。7.0のリリース以降では、標準的なMavenビルドにより、Dockerイメージ内でTalendジョブをビルドできるようになりました。このプロセスをCI/CDのパイプラインにスムーズに接続できます。サーバーレスアーキテクチャとは?最後の段階で活用されるのはサーバーレスアーキテクチャです。Talendでは、サーバーレスでジョブがデプロイされます。実際に、ジョブをコンテナー内で送ることによって、統合ジョブを任意の場所に自由にデプロイできるようになりました。様々な選択において、サーバーレスとして定義される新しいサービスのカテゴリーが登場しています。Instancesなど、ほとんどの大手クラウドプロバイダーはコンテナー用のサーバーレスサービスの提供を開始しています。これらのサービスを利用すると、コンテナーを実行する際にインフラストラクチャ(サーバーやクラスター)を管理する必要がなくなります。発生するコストはコンテナーの使用料だけです。ACIでジョブのビルドから実行までのパイプライン全体のデモンストレーションを使用して解説されました。このブログでは、Jenkinsを利用してCI/CDパイプラインを作成する方法について説明します。最初にDockerイメージ内でジョブをビルドし、Dockerレジストリでイメージを利用できるようにします。ACIを呼び出してイメージを実行します。このプロセスを再現する方法を見ていきましょう。次の要件を満たしていることを確認して下さい。Cloudの30日間の試用版で利用できます。Talend環境Talendを初めて使用する方向けに、各コンポーネントの概要について説明します。Console(TMC)でプロジェクトを作成します。次に、Gitリポジトリを使用してジョブのアーティファクトを保管するようにプロジェクトを構成します。ホストされたNexusサーバーがジョブで必要な全てのサードパーティライブラリを保管するように、TMCでNexusを構成する必要があります。Cloudのアカウントで、TMCを使用してプロジェクトとアーティファクトの管理を行います。Cloudアカウントで接続します。Studioは、Talendのメインとなるジョブ設計環境であり、ここで統合ジョブをビルドします。これらのステップに従ってStudioからクラウドアカウントでログインすると、TMCで定義されたプロジェクトを確認でき、Gitリポジトリに構成されたプロジェクトを使用できます。必要なプラグインをStudioに追加するには、後述のステップに従います。CommandLine(cmdline)です(クラウドの試用版を使用している場合、CommandLineツールはStudioのインストールファイルに含まれています)。CommandLineツールをインストールまたは初めて使用するときには、CommandLineツールのライセンスも指定する必要があります。このときは、Studioと同じライセンスファイルを使用できます。Builderツールは、Studio(実際にはGit)で設計されたジョブからコードを取得し、スクリプトを使用して実行可能バイナリーをビルドし、稼働環境へデプロイできるようにするコンポーネントです。Cloudのランタイム環境またはコンテナーのどちらを指定するかが決まります。最初に次のステップを実行します。Cloudアカウントでプロジェクトを作成し、プロジェクトをGitHubリポジトリにリンクする必要があります。この操作を行うためのドキュメントを参照して下さい。CloudアカウントでNexusを構成することを忘れないで下さい。CloudでNexusを構成するためのドキュメントに従って下さい。Nexusでは、次のリポジトリを用意する必要があります。Dockerプロファイルをプロジェクトの構成とジョブのpomファイルに追加します。必要な2つのファイルは、ここにあります。project.xmlとstandalone-job.xmlです。Job]を選択します。上でコピーしたものに置き換えます。変更は必要ありません。Mavenプラグインを使用した「docker」と呼ばれる新しいプロファイルの追加です。このMavenプロファイルを使用してジョブをビルドするときには、openjdk:8-jre-slimがベースイメージとして使用され、ジョブの実行方法を示す小さなスクリプトと共にジョブのjarが追加されます。Linuxをサポートしていないことに注意して下さい。Javaイメージでビルドする必要があります。詳細については、サポートされるプラットフォームのドキュメントを参照して下さい。3)Jenkinsをセットアップする3番目のステップはJenkinsサーバーのセットアップです。ここでは、Jenkinsの初期構築については取り上げません。Pipelineのスタートガイドを参照して下さい。Oceanプラグインを使用して、CI/CDパイプラインを使用します。Maven設定ファイルをJenkinsにセットします。files]に移動し、「maven-file」というIDを使用してファイルを作成します。下のスクリーンショットに示すように、このファイルをコピーします。ユーザー独自の設定に合わせてCommandLineのパスを変更し、Nexus認証情報とURLを独自に指定したことを確認して下さい。パイプラインの詳細に移る前に、いくつかの認証情報を定義する必要があります。credentials]を選択し、左側の[Credentials]を選択します。下のスクリーンショットを参照して下さい。Hub、AWS、Azure用に4つの認証情報を作成します。AWSのみを使用する予定の場合は、Azure認証情報を指定する必要はありません(逆も然りです)。KEYを必ず指定して下さい。Dockerイメージを使用できるようにする必要があります。CLIでDockerイメージを使用し、様々なサービスに対してCLIコマンドを実行します。これは、これらのCLIをマシンにインストールせずに簡単に使用するための方法です。以下のイメージを使用します。azure-cli)勿論これに限らず、ユーザー環境に合うイメージを使用できます。これらのDockerイメージをJenkinsマシン上でプルする必要があります。Dockerプラグインを使用し、「withDockerContainer(‘image’)」関数を使用してCLIコマンドを実行(後述)できます。Dockerコンテナー内のビルドのステップの実行については、こちらのJenkinsドキュメントを参照して下さい。been全ての前提条件を満たしたら、メインページで「新しいアイテム」を作成して[Pipeline]を選択します。作成後に、パイプラインを構成できます。ここでは、パイプラインのスクリプト(Groovy言語)を定義します。スクリプトはこちらを参照して下さい。このファイルで、主要なステップを見ていきましょう。ファイルの先頭部では、環境変数を使用してユーザー独自の設定を指定できます。「TALEND_JOB_PIPELINE」というプロジェクトと「test」というジョブを使用する例が用意されています。プロジェクトのGit名は、GitHubリポジトリ内のプロジェクト名と一致している必要があります。名前が大文字になっているのはそのためです。このスクリプトでは、Dockerイメージ名としてジョブ名を使用するので、ジョブ名にアンダースコアは使用できません。アンダースコアを使用したい場合は、Dockerイメージに別の名前を定義して下さい。次の環境変数を設定する必要があります。"talendinc"このファイル内で、各ステップは「stage(ステージ)」によって定義されます。最初の2つのステージでは、Gitプラグインを使用してジョブの最新バージョンをプルします。ジョブをビルドします。ご覧のように、Mavenプラグインを利用しています。設定はJenkins設定ファイルに含まれています。IDを使用してJenkinsの構成に追加したファイルです。Container」(コンテナーとしてのジョブのパッケージ化)ステージで、次の行を変更します。Dockerイメージでのジョブのビルド後で、イメージをDockerhubレジストリにプッシュします。このステップと次のステップでは、CLIを使用して異なるサードパーティを使用します。CLIを直接使用できます。withCredentials()関数を使用してDockerhubのユーザー名とパスワードを取得します。environment」(デプロイ環境)ステージは、パイプラインを実行する際のユーザーとの対話的処理です。ACIのどちらにデプロイするかの確認が行われます。デプロイまで連続的にビルドを実行する場合は、このステップを省略できます。このステップはデモ用です。ACIへのデプロイです。2つのそれぞれのステージでは、ユーザー独自の設定を使用して変更する必要があります。Fargateのデプロイステージでは、次の行を変更します。Clusterの名前とタスクの定義を変更する必要があります。これらは、AWSコンソールで作成して下さい。この操作については、こちらのドキュメントを参照して下さい。Fargateは北部バージニア地域でのみの使用可能ですが、他の地域でも今後使用できるようになります。Hubアカウントで作成されます。パイプラインスクリプト内のデフォルト構成を使用する場合は、talendinc/test:0.1となります。ACIにも当てはまり、ユーザー独自のリソースグループとコンテナーインスタンスを指定する必要があります。4)CommandLineを構成する実際のところ、MavenはCommandLineを使用してジョブをビルドします。CommandLineは、スクリプトモードとサーバーモードの2つのモードで使用できます。ここでは、サーバーモードでCommandLineを使用します。最初に、CommandLineのワークスペースを指定する必要があります(ここではJenkinsワークスペース)。Jenkinsワークスペースへのユーザー独自のパスを使用して、次のようにcommand-line.shファイルを変更します(パスは、前のステップで選択したパイプライン名によって異なります)。8002ユーザー独自の設定に従ってJenkinsのホームパスを変更します。最後に、/configuration/maven_user_settings.xmlファイルを変更します。URLとログイン情報をコピーして、このファイルに貼り付けます。その後で、バックグラウンドでCommandLineを起動します。&5)パイプラインを実行する必要な全ての構成が完了したら、パイプラインを実行できます。Ocean]ビューに移動し、[run]ボタンをクリックします。これによりパイプラインがトリガーされ、パイプラインの進捗状況が表示されます。Pipelineここでのパイプラインは、コンテナーをデプロイする場所をユーザーに尋ねます。Fargateを使用する例を見てみましょう。デプロイを進めると、Fargateクラスターに1つの保留中のタスクが残ります。実行されたタスクの詳細を調べる場合は、ジョブのログにアクセスできます。これで、次のような任意の場所でDockerコンテナーにパッケージ化されたTalend統合ジョブを実行できるようになります。...TalendのCI/CD機能により、ビルドからジョブの実行までのプロセス全体を自動化できます。クラウドの選択肢にかかわらずコンテナーの移植性を活用したい場合、この例を参考に、CI/CDツール(ここではJenkins)を使用して、様々なクラウドコンテナーサービスでビルドを自動化して実行できます。これは、数多くある方法の1つの例にすぎませんが、コンテナーとしてジョブをビルドできるようになれば、統合ジョブの全く新しい可能性が開かれます。ACIなど)によってコストを大幅に削減できます。インフラストラクチャの構成にかける時間を短縮し、ジョブの設計に専念することもできます。利用されているリソースどこから始めてよいかわからないという方へ。