1
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?

ServiceNow CICD Update Set APIについて

1
Posted at

本記事は筆者個人の検証・見解に基づくものであり、内容の正確性を保証するものではありません。実際の運用にあたっては公式ドキュメントおよび各組織のガイドラインをご確認ください。

はじめに

ServiceNowでは、開発したカスタマイズ内容を環境間で移送する手段として Update Set が広く使われています。Update Setは変更内容をXMLとしてキャプチャし、開発環境から本番環境へリリースする際の基本的な仕組みです。
ServiceNowのベストプラクティスでは、1つのUpdate Setに含める変更は小さく保つことが推奨されています。しかし実際の開発現場では、複数の機能追加や修正が重なり、Update Setの数が気づけば大量となってしまった、ということも多々あります。
複数のParent Update SetやBatch Update Setといった仕組みも用意されていますが、制約上、リリースを行う担当者の負荷は高いと思われます。
リリースのたびにこれらの作業を繰り返すことを考えると、手動運用には限界を感じてしまいます。
そこで注目したいのが、ServiceNow CICD APIです。本記事では、CICD APIの概要と実際の使い方について紹介していきます。

CICD APIとは?

CICD APIとは、アプリケーションの開発・テスト・本番デプロイまでの一連のフローを自動化するためのREST API群です。ServiceNowにおいては、2020年リリースのOrlando以降、CICD Spokeが標準搭載されています。
もともとはApplication Repositoryをベースとした仕組みでしたが、比較的新しいYokohamaリリースからはUpdate Set向けにも対応が拡張されており、より多くの現場で活用できるようになっているようです。1

CICD Spokeを使ってみる!

CICD Spokeにはいくつかのアクションが用意されており、Retrieveまで一括で実施するものや、Commitのみを実行するものなど、用途に応じて使い分けることができます。詳細についてはServiceNow公式Docsをご参照ください。
今回は以下の2つのアクションを使って、実際の動きを確認していきます。

Retrieve Update Set With Update Set Source ID
取得元のSource IDを指定してUpdate Setを取得する
Commit Retrieved Update Set
取得したUpdate Setをコミットする

実施イメージ

PDIを2台用意して下記の通りtest用の更新セットをRetriveとCommitまで実施してみます。
image1.png

CICD REST API (com.glide.continuousdelivery) プラグインが必要になります。

1. 事前準備

1-1. prod側のsys_userにユーザーを追加

image2.png

項目 設定値
User ID 任意のID
Use Name任意の名称
付与ロール sn_cicd.sys_ci_automation、teamdev_user
Password 何でもよい
Web service access only true(MFA認証回避のため)

1-2. prod側のUpdate Source(sys_update_set_source)にレコード追加

1で作成したユーザの情報を追加します。
Typeは「Develophment」に設定しました。
URLはdevのものを指定します。
image3.png

・レコード作成後に上記のSys_idを控えておくことを忘れずに。
・1-1でユーザーに「teamdev_user」を付与しておかないと、レコードが作成できません。

1-3. prod側のsys_userにユーザーを追加

image4.png

項目 設定値
User ID 任意のID
Use Name 任意の名称
付与ロール sn_cicd.sys_ci_automation
Password 何でもよい
Web service access only true(MFA認証回避のため)

1-4. Credentialにレコードを追加

dev側のCredentialにレコードを追加します。UserとPasswordは1-3で作成したユーザーの情報を追加します。
Credential Aliasは以下の赤枠を設定します。
(今回はBasic認証パターンです。)
image5.png

1-5. dev側で更新セットを作成

image6.png
その後、適当にテーブルを更新します。
今回はincidentテーブルにカラムを2個追加し、フォームレイアウトを変更にしました。
最後にStateを「Complete」にします。
image7.png

1-6. dev、prodの環境で変更点を確認

・dev
image8.png
cicd_test1、cicde_test2がカスタマイズした箇所になります。

・prod
image9.png
cicd_test1、cicde_test2はまだありません。

2. 移送の確認

2-1. RetrieveのAction実行

devのWorkflow studioを開きActionの「Retrieve Update Set With Update Set Source ID」を選択し、「TEST」を実行します。
image10.png
各パラメータは以下を設定してください。

項目 設定値
Instance URL 移送先のインスタンスURL
Credential Alias 1-4で設定したもの
Update Set Source id 1-2で控えたsys_id
Update Set id 1-5で作成した更新セットのsys_id
Auto Preview 今回はtrue(プレビューを自動で実施するかどうかのフラグです。)

入力し終えたら、Run Testを実行します。
prodの環境で、移送元で作成した更新セットが登録されていることが確認できます。
image11.png
image12.png

Previewまで実施したら今度はコミットを実施してみます。

2-2. CommitのAction実行

devのWorkflow studioを開きActionの「Commit Retrieved Update Set」を選択し、「TEST」を実行します。
image13.png

各パラメータは以下を設定してください。

項目 設定値
Retrived Update Set id 移送先の「sys_remote_update_set」にあるStateが「Previewd」かつ今回適用したい更新セットのsys_id (1-5で作成した更新セットのsys_idではありません。)
Credential Alias 1-4で設定したもの
Instance URL prodのインスタンスURL

入力し終えたら、Run Testを実行します。

完了後、「State」が「Committed」になっていることを確認します。
image14.png
image15.png

2-3.適用状態を確認

prodのIncidentテーブルから任意のレコードを開き、適用状態を確認します。
・Commit前
image16.png

・Commit後
きちんと移送されていることが確認できます。
image17.png

3. 所感

今回はServiceNowのOOTB(Out of the Box)機能をそのまま利用しましたが、CICD APIはREST APIとしても提供されています。これをベースに独自のSubFlowやActionを作成することで、各現場の運用フローに合わせたカスタマイズも十分に可能です。
また、OOTBでも複数の標準部品が提供されているため、まずはそちらを活用するほうが、今後のアップグレードへの追従という観点からも望ましいでしょう。

ひとつ注意点として、コンフリクト(Confliction)への対応は人間の判断が必要になります。Update Setのリリースでは、コンフリクト発生時に作業を一時停止して手動で解消する手間が生じるため、完全な自動化とはいきません。この点においては、インストール後にSkipped Recordとして対処できるApplication Repositoryのほうが、CI/CDとの相性は良いかなと思いました。

参考

  1. https://sapphirenow.dev/post/alm-part-1/

1
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
1
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?