CICD Actions for SAP Integration Suiteとは
Cloud Integrationのコンテンツの移送はSAP Cloud Transport Management (CTMS) でできます。しかし、CTMSでカバーされないこととして次のようなことがあります。
- 環境ごとのExternalized Parameterの更新とデプロイ
- 環境ごとのログレベルの変更
- 不要になったコンテンツの削除
CICD Actions for SAP Integration Suiteは、コンテンツの移送や環境ごとの差分の適用、不要になったコンテンツの削除などをおこなうためのGitHub Actionsと、それらを利用するためのGitHubのワークフローのコレクションです。
SAP社とMercedes-Benz社によって開発され、オープンソースとして公開されています。概要や使い方は以下のブログシリーズで紹介されています。
リポジトリ
ワークフローは多数あるのですが、このブログではパッケージを開発環境からテスト環境に移送するワークフローである (Dev) BTP Download to GIT and Upload/Deploy to TST が利用できるまでの設定を行います。
前提
CICD Actions for SAP Integration Suiteを使うためには、GitHubの個人アカウントではなくOrganizationが必要になります。Organizationは以下の"Create a free organization"から無料で作成することができます。
リポジトリの構成
SAP/cicd-actions-for-sap-integration-suiteを自分のOrganizationにForkします。このリポジトリには、CI/CDで使うActionやワークフローが含まれています。
実際にCI/CDのワークフローが実行されるのはcicd-intsuiteというリポジトリです。cicd-intsuiteがForkからワークフローを一日一回取り込んで同期します。
オリジナルのSAP/cicd-actions-for-sap-integration-suiteとForkを同期させるのは、利用者側の責任となります。
ランドスケープ
移送に最低限必要なのは、開発(DEV)テナントと検証(TST)テナントです。これ以外の環境は任意で追加することができます。そのためにはcicd-intsuiteリポジトリ内にEnvironmentを作成し、環境ごとの認証情報を設定します(後述)。
設定手順
ドキュメントにしたがって以下の設定を行います。
-
cicd-actionsリポジトリをフォーク -
cicd-intsuiteリポジトリを作成 - Organizationにチームを作成
- Cloud Integrationのサービスキーを作成
- GitHub Appsの作成
- Gitの環境変数を設定
- Syncのワークフローを実行
省略したステップについて
ドキュメントにはCloud IntegrationでAccess Policiesを使用している場合の追加ステップとしてTechnical Userの登録がありますが、今回の検証ではスキップしました。
変数の設定レベルについて
以下の手順では、ドキュメントに沿ってOrganizationレベルで設定するものとcicd-intsuiteリポジトリレベルで設定するものを分けて書いていますが、実際の検証ではすべてリポジトリレベルで設定しました。
1. cicd-actionsリポジトリをフォーク
SAP/cicd-actions-for-sap-integration-suiteを自分のOrganizationにフォークします。
2. cicd-intsuiteリポジトリを作成
自分のOranizartionに以下の構成でcicd-intsuiteリポジトリを作成します。
cicd-intsuite/
└── .github/
└── workflows/
└── sync-cicd-templates.yml
sync-cicd-templates.ymlはcicd-actionsリポジトリからコピーします。
3. Organizationにチームを作成
CICD Actions for SAP Integration Suiteでは、ワークフローの実行権限をGitHubのチームによって制御しています。ワークフローの名前の先頭に"(DEV)"とついているものは開発者権限、"(Admin)"とついているものは管理者権限が必要になります。
OrganizationのTeamsタブより2つのチームを作成します。作成者は自動的にチームに割りあたります。他のユーザに権限を与える場合は、ユーザをチームに追加します。チーム名は何でもよく、後述の変数によってマッピングされます。
| チーム | 実行可能なワークフロー | 用途 |
|---|---|---|
| 開発者 | btp-download-git-upload-deploy.yml |
DEV→TSTの移送 |
btp-update-externalized-iflow-parameters.yml |
Externalized Parameter更新 | |
btp-delete-from-btp-and-git.yml |
BTP/Gitからの削除 | |
| 管理者 | btp-download-to-git.yml |
DEVからGitへのダウンロード |
btp-deploy-delete.yml |
任意環境へのデプロイ/削除 | |
btp-release-import.yml |
リリースインポート | |
git-create-release.yml |
リリース作成(development→main) | |
sync-cicd-templates.yml |
テンプレート同期(手動実行時のみ) |
Organizationの変数設定
OrganizationのSettings > Secrets and Variables > Actions より、以下の変数を登録します。
| 変数名 | 設定値 |
|---|---|
BTP_ADMIN_TEAM_SLUG |
開発者のチーム名 |
BTP_DEV_TEAM_SLUG |
管理者のチーム名 |
4. Cloud Integrationのサービスキーを作成
移送元(DEV)および移送先(TST)のサブアカウントでCloud Integrationのサービスインスタンス (プラン:api) とサービスキーを作成します。
サービスインスタンスには以下のRoleを含めます。
- AuthGroup_IntegrationDeveloper
- AuthGroup_TenantPartnerDirectoryConfigurator
環境変数に認証情報を設定
cicd-intsuiteリポジトリにDEVとTSTの2つの環境を作成し、各環境にサービスキーの情報を変数およびシークレットとして登録します。
変数
| 名称 | 設定値 |
|---|---|
BTP_API_URL |
サービスキーのurl |
BTP_API_USER |
サービスキーのclientid |
BTP_IS_URL |
Integration Suiteのweb UI URL (例:https://xxx.integrationsuite.cfapps.eu10.hana.ondemand.com) |
BTP_TOKEN_URL |
サービスキーのtokenUrl |
シークレット
| 名称 | 設定値 |
|---|---|
BTP_API_PASSWORD |
サービスキーのclientsecret |
5. GitHub Appsの作成
自分のOranizationのSettings > Developer Settings > GitHub Appsより、2つのGitHub Appを登録します。
-
CICD Reader: Forkした
cicd-actionsの読み取り用 -
Consumer Bot:
cicd-intsuiteの操作、組織情報の読み取り用
Permissionsには以下を指定します。
CICD Reader
| Permission | Level |
|---|---|
Contents |
Repository — Read-only |
Actions |
Repository — Read-only |
Consumer Bot
| Permission | Level | Needed For |
|---|---|---|
Contents |
Repository — Read & Write | |
Actions |
Repository — Read-only | |
Environments |
Repository — Read-only | |
Workflows |
Repository — Read & Write | |
Pull requests |
Repository — Read & Write | |
Members |
Organization — Read-only |
GitHub Apps登録時に生成されるApp IDを控えます。

また、Private keysセクションから"Generate a private key"をクリックしてPrivate Key (.pemファイル)をダウンロードします。

Organizationの変数設定
OrganizationのSettings > Secrets and Variables > Actions より、以下の変数およびシークレットを登録します。
変数
| 名称 | 設定値 |
|---|---|
GIT_CICD_APP_ID |
CICD ReaderアプリのApp ID |
GIT_GITHUB_APP_ID |
Consumer BotアプリのApp ID |
シークレット
| 名称 | 設定値 |
|---|---|
GIT_CICD_APP_PRIVATE_KEY |
CICD ReaderアプリのPrivate Key |
GIT_GITHUB_APP_PRIVATE_KEY |
Consumer BotアプリのPrivate Key |
6. Gitの環境変数を設定
Organiationレベル
OrganizationのSettings > Secrets and Variables > Actions より、以下の変数を登録します。
| 名称 | 設定値 |
|---|---|
GIT_CICD_ORGREPO |
Forkしたcicd-actionsのリポジトリ名(例:miyasuta-org/cicd-actions-for-sap-integration-suite) |
RUNS_ON |
ジョブを実行するRunnerを指定する。(例:"ubuntu-latest") |
cicd-intsuiteレベル
cicd-intsuiteのSettings > Secrets and Variables > Actions より、以下の変数を登録します。
| 名称 | 設定値 |
|---|---|
GIT_CICD_REF |
Forkしたcicd-actionsの参照先ブランチまたはタグ※ |
PACKAGE_REGEX |
ダッシュボードに表示させるIntegration Packageの正規表現。.*を指定すると全てのパッケージが対象になる |
※GIT_CICD_REFについて、設定ドキュメントではv1となっていますが、このためにはFork側にv1のブランチを作成する必要があります。検証ではmainを指定しました。ブランチやタグを固定することで、オリジナルのリポジトリとForkが更新されてもcicd-intsuiteのワークフローが影響を受けないようにすることができます。
7. Syncのワークフローを実行
Forkからワークフローを取り込むための処理を実行します。
以下の画面ショットではすでに"Actions"の中に複数のワークフローが表示されていますが、初期状態では"(Admin) Sync CICD Workflow Template"のみが表示されています。
重要な点として、同期処理は2回実行する必要があります。1回目は何も指定せずに実行し、"Add a scenario to the active list"のドロップダウンに表示されるシナリオを生成します。2回目にシナリオを指定して実行し、関連するワークフローのファイルを取り込みます。
今回は以下のシナリオを選択しました。
- 3-tier landscape (DEV / TST / PRD)
- BTP Dashboard Generator
その結果、リポジトリに複数のワークフローファイルが追加されます。
DEVからTSTへの移送
簡単なiFlowを作成し、DEV環境からTST環境へ移送してみます。

ポイントは、Externalized Parameterがあるところです。

ステップ
-
downloadブランチを作成 - DEV環境からGitHubにコンテンツをダウンロード
-
developブランチを作成 - TST用のExternalized Parameterを設定
- TST用のデプロイ設定
- TST環境にデプロイ
1. downloadブランチを作成
ステップ2でdownloadブランチを使用するため、事前にブランチを作成します(ないとエラーになる)。
git pull //mainブランチの状態を同期
git checkout -b download
git push -u origin download
2. DEV環境からGitHubにコンテンツをダウンロード
(Admin) BTP Download into GIT download Branchのワークフローを実行します。パラメータとして以下を指定します。
| 名称 | 設定値 |
|---|---|
| Comma-separated list of IDs to be downloaded | <パッケージID> |
| Environment - Source BTP for Download | DEV |
| Mode IntegrationPackages/PartnerDirectory | IntegrationPackages |
| JIRA Story / SNOW Incident | 任意の値 |
その結果、コンテンツと設定パラメータ用のファイルがダウンロードされます。

3. developブランチを作成
ステップ5はdevelopブランチのコンテンツを移送するので、設定を入れる前にdevelopブランチを作成しておきます。
git checkout download
git pull
git checkout -b development
4. TST用のExternalized Parameterを設定
/Configuration/ConfigParams_INTEGRATION_FLOW.jsonは以下のようになっています。ParametersセクションにExternalized Parameterのデフォルト値(DEV環境での値)が設定されています。
{
"PackageIntegrationFlowParameters": {
"PackageName": "CICD_TEST",
"PackageID": "CICDTEST",
"Artifacts": [
{
"ArtifactID": "Echo",
"ArtifactName": "Echo",
"ArtifactType": "INTEGRATION_FLOW",
"Parameters": [
{
"DataType": "xsd:string",
"Description": null,
"ParameterKey": "RESPONSE_MESSAGE",
"ParameterValues": {
"Default": "Hello from DEV"
}
},
{
"DataType": "xsd:string",
"Description": null,
"ParameterKey": "SAP_ProfileId",
"ParameterValues": {
"Default": "iflmap"
}
}
]
}
]
}
}
TST用の設定を追加します。
{
"DataType": "xsd:string",
"Description": null,
"ParameterKey": "RESPONSE_MESSAGE",
"ParameterValues": {
"Default": "Hello from DEV",
"TST": "Hello from TST"
}
},
5. TST用のデプロイ設定
/Configuration/Deployment_INTEGRATION_FLOW.jsonは以下のようになっています。
{
"PackageIntegrationFlowDeployments": {
"PackageName": "CICD_TEST",
"PackageID": "CICDTEST",
"IntegrationFlows": [
{
"ArtifactID": "Echo",
"ArtifactName": "Echo",
"Deploy": "false",
"Rank": "100",
"LogLevel": "INFO",
"Runtimes": "iflmap"
}
]
}
}
以下の項目は環境ごとに設定が可能です。
| 項目 | 説明 |
|---|---|
| Deploy | iFlowをデプロイするか |
| Rank | デプロイ順を表す。Rankの小さいものからデプロイされる |
| LogLevel | ログレベル。設定可能な値はINFO, WARN, ERROR, DEBUG
|
| Runtimes | 実行環境。iflmapはCloud Integrationを表す。Edge Integration Cellは未定 |
設定値については、以下のブログに詳しく書かれています。
環境別の設定はEnvironmentsセクションに記載します。今回はTST環境向けに以下の設定を追加しました。
"IntegrationFlows": [
{
"ArtifactID": "Echo",
"ArtifactName": "Echo",
"Deploy": "false",
"Rank": "100",
"LogLevel": "INFO",
"Runtimes": "iflmap",
"Environments": {
"TST": { "Deploy": "true", "LogLevel": "INFO" }
}
}
]
設定が完了したら、developブランチをコミットしてリモートへプッシュします。
6. TST環境にデプロイ
(Dev) BTP Download to GIT and Upload/Deploy to TSTのワークフローを実行します。パラメータとして以下を指定します。
| 名称 | 設定値 |
|---|---|
| Comma-separated list of IDs to be downloaded | <パッケージID> |
| Mode IntegrationPackages/PartnerDirectory | IntegrationPackages |
| JIRA Story / SNOW Incident | 任意の値 |
デプロイが成功すると、TST環境にパッケージが移送され、iFlowがデプロイ済みになります(ステップ5で"Deploy": "true"を設定したため)。

Externalized ParameterはTST用の設定になっています。

以下のIssueに上げた事象により、ワークフローの実行がエラーになりました。ワークアラウンドについてもこちらに記載しています。
https://github.com/SAP/cicd-actions-for-sap-integration-suite/issues/14
補足:新しいパッケージを追加で移送する場合
毎回downloadブランチを経由する必要はなく、(Dev) BTP Download to GIT and Upload/Deploy to TSTのフローを実行することでdevelopmentブランチにDEV環境から最新のパッケージが持ち込まれます。
追加のパッケージはConfigurationが初期状態なので、TST環境にアップロードはされますがデプロイはされません。Configurationを設定して再度ワークフローを実行することで、設定した内容で iFlow が TST環境にデプロイされ、TST用パラメータが適用されます。
おまけ:ダッシュボード
ダッシュボードを使用すると環境ごとのパッケージの状態を一覧で見ることができます。
前提として、cicd-intsuiteリポジトリのSettings > Pages > Build and deploymentより、Sourceを"GitHub Actions"にしておく必要があります。
(Admin) BTP Dashboard Generatorのワークフローを実行すると、ページが生成されます。実行結果のリンクからページにアクセスできます。

移送したパッケージについて、環境間で差異があるため赤く表示されています。(DEV環境はDeployがfalse、TST環境はtrueのため)

本番リリースはどうするか?
本番へのリリース手順は以下のブログシリーズで公開予定です。









