継続的インテグレーション
Liferay CloudはJenkinsを使用して、継続的なインテグレーションインフラストラクチャサービスを強化しています。プルリクエストを送信するか、事前設定されたGitHubブランチの1つにコミットをプッシュすると、自動で設定可能なビルドがトリガーされます。
デフォルトでは、プロジェクトのJenkinsインスタンスはインターネット上のどのIPアドレスからでもアクセス可能で、アクセスはJenkinsのログイン情報によって制御されます。組織のネットワークへのアクセスを制限するには、 IP によるプロジェクトの Jenkins へのアクセス制限 を参照してください。
Liferay Cloud のお客様 ( のお客様 ログインを使用) は、ビルドを管理およびレビューする権限を持ちますが、完全な管理者権限は持ちません。
デフォルトでは、この自動ビルドはコードをコンパイルし、テストを実行するように設定できます。 Liferay Cloudはサービスをビルドし、そのステータスを環境のビルドページに表示します。テストが失敗した場合は、Jenkinsダッシュボードとhttps://ci-companyname-infra.lfr.cloudログを確認できます。
継続的インテグレーションは、GitHub、GitLab、またはBitbucketからデプロイする場合にのみ機能し、CLIからのデプロイでは機能しません。
詳細については、 CI サービスの制限事項 を参照してください。
JDKバージョンの設定
CI サービスは、環境変数 LCP_CI_GRADLE_JDK で構成された JDK を使用します。デフォルトでは、この変数は jdk8 に設定されます。
Jenkinsは、ビルド中にタスクを実行したりコードをコンパイルしたりするために、設定されたJDKバージョンを使用します。
LCP_CI_GRADLE_JDK でサポートされている値は次のとおりです。
jdk8jdk11jdk17jdk21
この設定は、CIサービスがビルド中に使用するJDKを制御します。デプロイされたLiferayサービスコンテナで使用されるJDKは構成されません。
グローバルJDKの設定
CI バージョン 6.0.0+では、環境変数 LCP_CI_GRADLE_JDK によって、独自の JDK 構成を指定しないブランチで使用されるデフォルトの JDK が定義されます。
-
Liferay Cloud Consoleを開きます。
-
ciサービスに移動します。 -
LCP_CI_GRADLE_JDK環境変数を追加または変更します。 -
変数の値を目的のJDKに設定します。
jdk21
環境変数の変更は、 ci サービスが再起動された後に有効になります。
LCP_CI_GRADLE_JDK を ci/LCP.json で構成することは推奨されません。特に、複数のブランチで異なる値を使用する場合はなおさらです。 ci/LCP.json への変更は、 ci サービスを再デプロイした後にのみ有効になるため、特定のブランチ ビルドが作成されたときにどの JDK バージョンがアクティブだったかを判断するのが難しくなる場合があります。
ブランチごとのJDKの設定
CI バージョン 6.1.1+では、個々のブランチに対してデフォルトの CI JDK を上書きできます。
-
対象のソースコードブランチで、
liferayディレクトリに移動します。 -
lcp-ci-liferay.propertiesファイルを作成します。 -
lcp.ci.liferay.gradle.jdkプロパティを追加します。lcp.ci.liferay.gradle.jdk=jdk21
このJDK構成は、現在のブランチにのみ適用されます。
異なるJDKバージョンを必要とする各ブランチごとに、この設定を繰り返してください。
変更内容は次回のビルドから適用されます。
CIサービスビルドの自動デプロイ
自動デプロイは、グローバル設定またはブランチごとに設定できます。
ブランチごとのデプロイメント構成を推奨します。これは、より予測可能なデプロイメント動作を実現し、グローバルなブランチマッチングルールによって引き起こされる意図しないデプロイメントを回避できるためです。
ブランチごとの自動デプロイの設定
CI バージョン 6.1.2+では、個々のブランチを特定のターゲット環境に自動的にデプロイするように構成できます。
-
対象のソースコードブランチで、リポジトリのルートディレクトリに移動します。
-
lcp-ci.propertiesファイルを作成します。 -
lcp.ci.deploy.targetプロパティを追加します。lcp.ci.deploy.target=uat
このブランチは、指定されたターゲット環境にのみ自動的にデプロイされます。
自動デプロイが必要な各ブランチに対して、この設定を繰り返してください。
変更内容は次回のビルドから適用されます。
グローバル自動デプロイの設定
従来の環境変数を使用して、自動デプロイメントをグローバルに設定できます。
-
Liferay Cloud Consoleを開きます。
-
ciサービスに移動します。 -
以下の環境変数を設定します:
LCP_CI_DEPLOY_BRANCHLCP_CI_DEPLOY_TARGET
LCP_CI_DEPLOY_BRANCH は、自動デプロイ用のソースブランチ名に一致する正規表現を受け入れます。
デフォルト値は以下のとおりです。
| 環境変数 | デフォルト値 |
|---|---|
LCP_CI_DEPLOY_BRANCH | develop |
LCP_CI_DEPLOY_TARGET | dev |
環境変数の変更は、 ci サービスが再起動された後に有効になります。
LCP_CI_DEPLOY_BRANCH および LCP_CI_DEPLOY_TARGET を使用したグローバル展開構成は、後方互換性のために維持されており、新しい構成には推奨されません。
代わりに、 lcp-ci.properties を使用して、各ブランチでデプロイメント ターゲットを直接構成します。
LCP_CI_DEPLOY_TARGET のみを変更し、 LCP_CI_DEPLOY_BRANCH を更新しないと、予期しないデプロイメントが発生する可能性があります。
従来の自動デプロイ変数の無効化
これは自動デプロイに推奨される構成です。
従来のグローバル展開変数を無効にして、ブランチレベルで明示的に構成された展開のみを許可することができます。
-
Liferay Cloud Consoleを開きます。
-
ciサービスに移動します。 -
以下の環境変数を追加してください。
LCP_CI_AUTO_DEPLOY_LEGACY_ENV_VARS_DISABLE=true
ci サービスを再起動した後、明示的に lcp.ci.deploy.target プロパティが設定されたブランチのみが自動デプロイを実行します。
自動デプロイの無効化
ブランチ構成に関係なく、すべての自動デプロイを無効にすることができます。
-
Liferay Cloud Consoleを開きます。
-
ciサービスに移動します。 -
以下の環境変数を追加してください。
LCP_CI_AUTO_DEPLOY_DISABLE=true
ci サービスを再起動した後、自動デプロイは実行されません。
デフォルトのJenkinsfileを使用する
CIサービスには、プロジェクトのビルドに使用されるデフォルトのJenkinsfileが含まれています。デフォルトのJenkinsfileは、これまでJenkinsfileに格納されていたすべてのロジックをカプセル化し、Jenkinsプラグインに移動します。これは、CI構成の変更を必要とせずに、バグ修正、セキュリティ修正、および改善を適用できることを意味します。
さらに、CIパイプラインのあらゆるステップをカスタマイズするための拡張ポイントも用意されています。
デフォルトのJenkinsfileを拡張する
デフォルトの Jenkinsfile を拡張するには、プロジェクトリポジトリの ci フォルダーに次のファイルを追加します。
Jenkinsfile-before-allJenkinsfile-before-cloud-buildJenkinsfile-before-cloud-deployJenkinsfile-after-allJenkinsfile-post-always
CIビルドプロセスの基本的な手順の概要は以下のとおりです。
-
ci/Jenkinsfile-before-allが存在する場合はロードします。 -
Liferayワークスペースを構築します。
-
ci/Jenkinsfile-before-cloud-buildが存在する場合はロードします。 -
コンソールに表示されるLiferay Cloudビルドを作成します。
-
ci/Jenkinsfile-before-cloud-deployが存在する場合はロードします。 -
現在のブランチがデプロイブランチであれば、ビルドをクラウド環境にデプロイできます。
LCP_CI_DEPLOY_BRANCH環境変数はデプロイブランチを設定し、LCP_CI_DEPLOY_TARGETはデプロイ環境を指定します。 -
ci/Jenkinsfile-after-allが存在する場合はロードします。これは、すべてのビルド手順が完了したときに実行されます。 -
ci/Jenkinsfile-post-alwaysが存在する場合はロードします。これは、ビルドが成功した場合でも失敗した場合でも実行されます。
デフォルトのパイプラインでどのように使用されているかを確認するには、Jenkinsサービスの起動ログを監視してください。起動ログには、デフォルトのJenkinsfileの全文が出力されます。
パイプラインの追加カスタマイズと外部呼び出し
パイプラインに追加の手順を設けることで、外部サービスを呼び出すことができます。例えば、REST API を介してサードパーティの監視サービスを呼び出したり、ビルドプロセス中に実行するスクリプトを呼び出したりすることができます。
また、リポジトリのci/フォルダ内に独自のJenkinsfile を定義することで、独自のパイプラインを作成することもできます。詳細については、 Jenkins Web サイト を参照してください。
外部サービスやカスタムパイプラインは慎重に使用してください。これらはLiferayクラウドサポートの範囲外です。カスタムJenkinsプラグインはサポートされていません。
異なる拡張ポイント間でのコードの再利用
これらの拡張ポイント間でコードを共有することで、構造を簡素化できる。一つの方法は、Groovyスクリプトを読み込むことです。
例えば、 ci/ フォルダに util.groovy という名前の Groovy ファイルを作成し、以下の内容を記述することができます。
def sendSlackMessage(message) {
println(message)
}
return this
次に、 ci/Jenkinsfile-before-cloud-build に以下を挿入します。
def util = load("ci/util.groovy")
util.sendSlackMessage("About to create Liferay Cloud build...")
プロジェクトのJenkinsへのアクセスをIPアドレスで制限する
CIサービスバージョン6.8.1以降
プロジェクトのJenkinsインスタンスにアクセスできるIPアドレスを制限することで、パブリックインターネットへの露出を減らすことができます。その情報漏洩は、ログインページ、ジョブページ、ビルドログ、JSON APIなど、Jenkinsのあらゆる部分に及ぶ。プロジェクトのCIサービスで許可リストを有効にしてください。
許可リストを有効にすると、リスト外の IP からのリクエストは、Jenkins UI または API に到達する代わりに HTTP 403 アクセス拒否 を受け取ります。
一部のIPアドレスは常に許可されており、追加する必要はありません。
- クラスタ内トラフィックおよびループバックトラフィック
- Liferayサポートスタッフ
- ロードバランサーの健全性チェック
- ソースコード管理(SCM)プロバイダーのWebhook送信元IPアドレス
ご自身の組織のIPアドレスのみを追加してください。 SCMプロバイダーのWebhook IPアドレスは自動的に許可されているため、ビルドは引き続き正常に実行されます。
許可リストを有効にする
許可リストは、ログインページを含むJenkinsへのアクセスを制御します。閲覧元のパブリックIPアドレスが省略されている場合、そのネットワークからJenkinsにアクセスすることはできません。保存する前に、自分の住所がリストに含まれていることを確認してください。
-
CI サービス上の
LCP_CI_ALLOWED_IPS環境変数 を、コンソールまたは CI サービスのLCP.jsonファイルで、カンマ区切りの CIDR 範囲のリスト (203.0.113.0/24のような IP アドレス ブロック) に設定します。単一のIPアドレスは
/32の範囲を使用します。LCP_CI_ALLOWED_IPS=203.0.113.42/32複数の範囲を指定する場合は、カンマで区切ってください。 IPv4とIPv6の両方のCIDRがサポートされています。カンマの前後の空白と空のエントリは無視されます。
LCP_CI_ALLOWED_IPS=203.0.113.0/24, 198.51.100.42/32, 2001:db8::/48
-
お釣りを保存してください。
LCP.jsonで変数を設定した場合は、代わりにコミットしてデプロイしてください。CIサービスが再起動され、数分間リクエストの受信が停止する場合があります。環境の サービス ページでサービスのステータスを確認してください。サービスが復旧すると、許可リストが有効になります。
-
許可リストに登録されているネットワークからJenkinsのURLを開き、ログインページが正しく読み込まれることを確認してください。
リストにないネットワークから同じ URL にアクセスすると、
HTTP 403 アクセス拒否が返されます。
許可リストを無効にするには、 LCP_CI_ALLOWED_IPS を削除するか、空の文字列に設定してから保存します。 CIサービスが再起動され、サービスが復旧するとアクセスが復元されます。
許可リストに載せるべきもの
組織のセキュリティ境界内にあるIPアドレスを許可リストに追加します。これは、あなた(または信頼できるセキュリティチーム)が管理、監査、パッチ適用を行うネットワークおよびシステムを指します。
オフィスネットワーク、VPN、および構築システムがインターネットに接続するために使用するパブリックIPアドレスを、ネットワークチームに問い合わせてください。現在アクセスしているアドレスを確認するには、そのネットワーク上の「自分のIPアドレスは?」といったサービスにアクセスしてください。プロバイダが動的アドレスを割り当てる場合は、それに依存する前に静的アドレスまたはアドレス範囲を要求し、ネットワークが変更されるたびにその値を再確認してください。
以下のカテゴリのIPアドレスを追加してください。
- 運用しているCI/CDシステムとバスティオンホスト
- 本社オフィスの外部IPアドレス
- 企業VPNの出口IPアドレス
- セキュリティ運用ツール
以下のIPアドレスタイプは、許可リストによる保護を弱めるため、使用を避けてください。
0.0.0.0/0または::/0(これらはインターネット全体に一致し、保護を無効にします)- 幅広いパブリッククラウドプロバイダーの選択肢
- 個々の開発者のホームIP
SCM IPの更新周波数を調整する
SCMプロバイダーが新しいWebhook IPアドレス範囲を公開すると、CIサービスは次回の更新時にそれらを反映するため、それまでは新しい範囲からトリガーされるビルドは開始されない可能性があります。環境変数 LCP_CI_ALLOWLIST_REFRESH_HOURS を 1 から 24 までの数値に設定して、更新が実行される頻度(時間単位)を制御します。デフォルト値は 24 時間です。この範囲外の値や数値以外の値は無視され、間隔はデフォルト値に戻ります。
環境変数リファレンス
これらの環境変数をCIサービス上で、コンソールまたはサービスの LCP.json ファイルで設定します。
| 名前 | デフォルト値 | 説明 |
|---|---|---|
LCP_CI_ALLOWED_IPS | カンマ区切りのCIDR範囲は、ジェンキンスに届く可能性があります。値 を設定すると、IP によるアクセスが制限されます。 | |
LCP_CI_ALLOWLIST_REFRESH_HOURS | 24 | CIサービスが、許可リストのSCMプロバイダーのIPアドレスを更新する間隔(1~24時間単位)。 |
LCP_CI_ARTIFACT_DAYS_TO_KEEP | -1 | 遺物が保管される日数 |
LCP_CI_ARTIFACT_NUM_TO_KEEP | 1 | アーティファクト と スタッシュ が保存される最近のビルドの数を設定します。 |
LCP_CI_AUTO_DEPLOY_DISABLE | false | ブランチレベルまたはグローバルなデプロイメント構成に関係なく、すべての自動デプロイメントを無効にします。 |
LCP_CI_AUTO_DEPLOY_LEGACY_ENV_VARS_DISABLE | false | 従来の LCP_CI_DEPLOY_BRANCH および LCP_CI_DEPLOY_TARGET デプロイメント構成を無効にし、 lcp.ci.deploy.target を介して構成されたデプロイメントのみを許可します。 |
LCP_CI_BUILD_DAYS_TO_KEEP | 14 | ビルドが保存される日数 |
LCP_CI_BUILD_NUM_TO_KEEP | 10 | 保存されたビルドの数 |
LCP_CI_BUILD_TIMEOUT_MINUTES | 30 | パイプライン実行の制限時間。この時間を過ぎると、Jenkinsはパイプラインを中止します。 |
LCP_CI_CLI_LOG_LEVEL | verboseに設定されている場合、CI サービスは --verbose フラグを使用して lcp コマンドを実行します。これにより、コマンド実行時のデバッグに役立つ情報がさらに提供されます。 | |
LCP_CI_DEPLOY_BRANCH | develop | 自動デプロイ に使用するブランチを指定します。有効なブランチ名が設定されていない場合、自動デプロイは無効になります。 |
LCP_CI_DEPLOY_TARGET | dev | 自動デプロイメント がデプロイされる環境を設定します。 LCP_CI_DEPLOY_BRANCH が設定されている場合にのみ使用されます。 |
LCP_CI_GRADLE_JDK | jdk8 | CI サービスの Java バージョン をビルドに使用します。 |
LCP_CI_LIFERAY_DXP_HOTFIXES_[ENV] | Liferay サービスをデプロイする際に CI が自動的に適用するホットフィックスの名前 (拡張子 .zip なし)。 [ENV] を環境名 (すべて大文字) に置き換えるか、 COMMON に置き換えてください。 | |
LCP_CI_NUM_EXECUTORS | 2 | ビルド実行キューで使用される実行エンジンの数。これを 1 に減らすと、ビルドの並列実行が制限され、場合によってはビルドの失敗が減る可能性があります。 |
LCP_CI_PRESERVE_STASHES_BUILD_COUNT | 20 | 個のスタッシュ を保持する最近のビルドの数を設定します。スタッシュは、 LCP_CI_ARTIFACT_NUM_TO_KEEP 変数で許可されているビルド数を超えて保持することはできません。 |
LCP_CI_SCM_MANAGE_HOOKS | true | コードホスティングプラットフォーム(GitHubなど)におけるWebhookの自動管理を有効または無効にします。 |
LCP_CI_SCM_PROVIDER | github | ビルドを取得するために使用するソース管理サービスを設定します。受け入れられる値は、 bitbucket、 github、および gitlab です。 |
LCP_CI_SCM_REPOSITORY_NAME | ビルドを取得するために使用するリポジトリ名(GitHub、Bitbucket、またはGitLabから取得)を設定します。 | |
LCP_CI_SCM_REPOSITORY_OWNER | リポジトリの所有者がビルドを取得するために使用していたもの。 | |
LCP_CI_SCM_TOKEN | ビルドを取得するために使用されるアクセストークン。 Bitbucket の場合は、 Atlassian API トークン を使用してください。 GitHubまたはGitLabを使用する場合は、個人アクセストークンを使用してください。 | |
LCP_CI_SCM_USERNAME | LCP_CI_SCM_TOKEN に関連付けられた Atlassian アカウントのメールアドレス (Bitbucket に必要)。 | |
LCP_CI_USE_DEFAULT_JENKINSFILE | true | デフォルトのJenkinsfileを有効または無効にします。 |
LCP_DATABASE_SERVICE | データベースサービスのホスト名。 |