0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CICD Actions for SAP Integration Suiteを使ってiFlowを移送する

0
Posted at

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を同期させるのは、利用者側の責任となります。

GitHub Settings.drawio.png

ランドスケープ

移送に最低限必要なのは、開発(DEV)テナントと検証(TST)テナントです。これ以外の環境は任意で追加することができます。そのためにはcicd-intsuiteリポジトリ内にEnvironmentを作成し、環境ごとの認証情報を設定します(後述)。

設定手順

ドキュメントにしたがって以下の設定を行います。

  1. cicd-actionsリポジトリをフォーク
  2. cicd-intsuiteリポジトリを作成
  3. Organizationにチームを作成
  4. Cloud Integrationのサービスキーを作成
  5. GitHub Appsの作成
  6. Gitの環境変数を設定
  7. Syncのワークフローを実行

省略したステップについて
ドキュメントにはCloud IntegrationでAccess Policiesを使用している場合の追加ステップとしてTechnical Userの登録がありますが、今回の検証ではスキップしました。

変数の設定レベルについて
以下の手順では、ドキュメントに沿ってOrganizationレベルで設定するものとcicd-intsuiteリポジトリレベルで設定するものを分けて書いていますが、実際の検証ではすべてリポジトリレベルで設定しました。

1. cicd-actionsリポジトリをフォーク

SAP/cicd-actions-for-sap-integration-suiteを自分のOrganizationにフォークします。

image.png

2. cicd-intsuiteリポジトリを作成

自分のOranizartionに以下の構成でcicd-intsuiteリポジトリを作成します。

cicd-intsuite/
└── .github/
    └── workflows/
        └── sync-cicd-templates.yml

sync-cicd-templates.ymlcicd-actionsリポジトリからコピーします。

3. Organizationにチームを作成

CICD Actions for SAP Integration Suiteでは、ワークフローの実行権限をGitHubのチームによって制御しています。ワークフローの名前の先頭に"(DEV)"とついているものは開発者権限、"(Admin)"とついているものは管理者権限が必要になります。

OrganizationのTeamsタブより2つのチームを作成します。作成者は自動的にチームに割りあたります。他のユーザに権限を与える場合は、ユーザをチームに追加します。チーム名は何でもよく、後述の変数によってマッピングされます。

image.png

チーム 実行可能なワークフロー 用途
開発者 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

image.png

環境変数に認証情報を設定

cicd-intsuiteリポジトリにDEVTSTの2つの環境を作成し、各環境にサービスキーの情報を変数およびシークレットとして登録します。

image.png

変数

名称 設定値
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の操作、組織情報の読み取り用

image.png

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を控えます。
image.png

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

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回目にシナリオを指定して実行し、関連するワークフローのファイルを取り込みます。

image.png

今回は以下のシナリオを選択しました。

  • 3-tier landscape (DEV / TST / PRD)
  • BTP Dashboard Generator

その結果、リポジトリに複数のワークフローファイルが追加されます。

DEVからTSTへの移送

簡単なiFlowを作成し、DEV環境からTST環境へ移送してみます。
image.png

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

ステップ

  1. downloadブランチを作成
  2. DEV環境からGitHubにコンテンツをダウンロード
  3. developブランチを作成
  4. TST用のExternalized Parameterを設定
  5. TST用のデプロイ設定
  6. 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 任意の値

image.png

その結果、コンテンツと設定パラメータ用のファイルがダウンロードされます。
image.png

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 任意の値

image.png

デプロイが成功すると、TST環境にパッケージが移送され、iFlowがデプロイ済みになります(ステップ5で"Deploy": "true"を設定したため)。
image.png

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

以下の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"にしておく必要があります。

image.png

(Admin) BTP Dashboard Generatorのワークフローを実行すると、ページが生成されます。実行結果のリンクからページにアクセスできます。
image.png

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

本番リリースはどうするか?

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?