ServiceNowでのDevOps CI/CD設計

## 記事の目的
DevOps連携を調査したのでその備忘録となります。

## [定義]DevOps CI/CD
そもそもServiceNowのみならず広く使われる用語であるDevOpsです。
改めて定義を見ると以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190712/7f35e53c-fcc5-c512-be23-738463dbbe57.png)

## ServiceNow DevOps構成の全体像
ServiceNowにおけるDevOps CI/CD の全体像を一枚にまとめると以下の図になります。
プロセスをツールやアプリケーションを連動することで、自動的に高速に推進するための設計図です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190712/3537d903-a1e6-7c12-e211-62d4e084c7fb.png)

## 以前の調査記事
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190712/cee3e4a7-2178-30da-a148-6d4d06c7a5a5.png)
以前（３年前）に技術検証をした際の記事があります。一部参考になると思います。
https://qiita.com/yasutaka_ono/items/16696bd3b359cca97da8

## 実現のために
まずはDevOps Change VelocityというStoreアプリ（だった記憶..？）をインストールする必要があります。
そのうえで、外部ツール連携を考慮していきます。
色々な実現プランがありますが、実現性が高そうと考えるのは以下の二つです。
1. Azure DevOps/ Azure Pipeline との連動
2. Github / Jenkins との連動

参考記事を載せておきます。

Setting up your first CI/CD pipeline with Azure Pipelines
<https://www.youtube.com/watch?v=ncI0etU33P0> 
Azure Pipelines 向け ServiceNow CI/CD 拡張機能
<https://marketplace.visualstudio.com/items?itemName=ServiceNow.vss-services-servicenow-cicd> 

## 最終的な実現イメージ
以下のような実行イメージとなります。通常の変更管理プロセスと比較して、自動化されたリリースプロセスとなり、サイクルを高速で回すことが可能になります。

デプロイイメージ：Dev->Test->Prodまで自動的に移行している（パイプライン）姿
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190712/84f4ce31-da8c-7b0d-0e5f-5d45ead170a2.png)

管理画面：ServiceNowはパイプラインの履歴を管理画面で監視できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190712/aa05e629-7c70-3c3e-d140-c83ebf9e991e.png)

## まとめ
上記を実現することでServiceNowにおけるCI/CD　DevOpsを実現可能と思います。
ServiceNowが考える理想のDXの姿（下図）の実現にとって必要な項目なので、実現されてみてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190712/a4007e30-7de5-6932-528d-1e21688f1697.png)

## Azure PipelinesとGithubの共通点と相違点。使用推奨の根拠など (2024_08_13追記)

### 結論
Azure DevOps/Pipelines/Reposの使用を推奨

### 利用目的
1. ソースコード管理
2. CI/CDの実現

### 共通点
・Microsoft製品(＝両方ともAzureで使用可能)
・Gitベースのバージョン管理システム

### 相違点
・想定ユーザーがクローズドプロジェクト⇔オープンプロジェクト
・pipelineはAzure DevOpsの一部、Githubは独立した製品
**★重要★**・Github ActionsはGithubに固有。Azureは様々なプラットフォームにて動作
**★重要★**・プロジェクト管理ツールとしての成熟度としてAzure DevOpsのほうが高い。

### サービス名称の対応表
・Azure DevOps ｜Github[大定義：製品名]
・Azure Pipelines｜Github Actions[中
・Azure repos  | git (?)[]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190712/9b86c3db-dbfe-c1d7-d1fc-d71eccde0bfe.png)
貼り付け元  <https://qiita.com/ymasaoka/items/c43ac02e0bc9cbdadd65> 


### できること（詳細仕様レベル）
コードの構築、テスト、公開、リリース、およびデプロイのためのワークフローを作成

仕様差分の詳細は以下に記載
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190712/d6b01db8-450d-37b0-156e-ef0dd09706b2.png)
まず、Azure Pipelines は多くのソース管理システムで使用できますが、GitHub Actions は GitHub に固有です。
GitHub Actions はコードレビュー、ブランチ管理、プログラムの並べ替えを自動化するために使用できますが、Azure Pipelines は主にCI/CD ワークフローの自動化に使用されます。
Azure Pipelines は環境、デプロイメント グループ、エージェント プールをサポートしますが、GitHub Actions はグループ内のセルフホスト ランナーのみを管理します。
Azure Pipelines では機能付きのセルフホスト エージェントを選択できますが、GitHub Actions ではラベル付きのセルフホスト ランナーを選択できます。
Azure Pipelines は承認とゲートをサポートしていますが、GitHub Actions にはそれらに相当するものがありません。そのため、エンタープライズ リリース オーケストレーションに GitHub Actions を使用することは困難です。
Azure Pipelines には、パイプライン内の外部サービスへの接続を調整するためのサービス接続と Webhook がありますが、GitHub Actions では Webhook のみが提供されます。
パイプラインの構成管理を支援するために、Azure にはシークレットとプレーンテキストの両方の変数と変数グループがあります。GitHub Actionsには、コード リポジトリまたは組織に関連付けられたシークレット変数のみがあります。
セキュリティの面では、Azure Pipelines は GitHub Actions にはない Secure Files 機能を提供します。
さらに、Azure Pipelines は、デプロイメント ワークフローを作成するために YAML ファイルで定義されたステージをサポートしていますが、GitHub Actions ではステージを異なる YAML ワークフロー ファイルに分離する必要があります。
Azure Pipelines を使用すると、ジョブ定義の構造の一部を省略できます。たとえば、単一のジョブの場合、ジョブ自体を定義する必要はなく、そのステップのみを定義できます。
対照的に、GitHub Actions では明示的な構成が必要であり、YAML 構造を省略することはできません。
Azure Pipelinesでは、パイプラインの実行名またはビルド番号をカスタマイズできます。繰り返しますが、GitHub Actions ではこの機能は提供されていません。
Azure Pipelines 拡張機能では複数のタスクをバンドルできますが、GitHub リポジトリに配置できるのは 1 つのアクションだけです。
ただし、GitHub Actions は柔軟性を高めるためにコンテナベースのアクションをサポートしていますが、Pipelines 拡張機能は TypeScript または PowerShell でのみ作成できます。
GitHub には、ネイティブ コード スキャン機能とサードパーティのセキュリティ スキャナーとの統合があります。対照的に、Azure Pipelines はサードパーティのセキュリティ スキャナーとのみ統合できます。
Azure DevOps は、CI/CD にとってより成熟しており、機能が豊富であると考えられています。さらに、このプラットフォームはエンタープライズ ツールとよりシームレスに統合されます。一方、GitHub Actions は新しいため、まだ実績を上げている段階ですが、一般的にはよりユーザーフレンドリーであると考えられています。
クローズドソフトウェアとオープンソースソフトウェア
Azure DevOps は、クローズドソース ソフトウェア開発専用のエンタープライズ ソリューションとして認識されることが多く、GitHub はオープン ソース コミュニティに関連付けられています。


プロジェクト管理ツール
プロジェクト管理は DevOps プロセスの重要な部分です。タスク、期限、問題、計画を追跡することが重要です。
Azure DevOpsを使用すると、ユーザーは幅広いプロジェクト管理ツールにアクセスできます。これには、DevOps の中核となるこの最新のアプローチを採用している開発チームにとって非常に価値のある Agile ツールが含まれます。
TFS (Team Foundation Server) の時代から派生した Azure Boards は非常に成熟した製品であり、1,000 を超える拡張機能を通じて他のシステムと統合されます。Slack で通知を受信したり、AWS サービスとの接続を確立したり、自動化されたドキュメントを作成したりといった機能を使用できます。
一方、GitHub は、GitHub にすでに保存されているコードのプロジェクト管理専用の GitHub Projects プラットフォームを提供しています。そのため、Azure DevOps はより幅広いプロジェクトをサポートします。
 
Azure DevOps と GitHub は、開発チームのコミュニケーション、コラボレーション、プロジェクト管理を簡素化します。しかし、どちらが最適なのでしょうか?
結論として、この比較をまとめると、オープンソース プロジェクトに取り組む開発者にとって、 GitHubはより良い選択肢です。このプラットフォームの機能は、プロジェクトを外部からの貢献に開放するのに役立ちます。
一方、Azure DevOps はクローズドソース プロジェクトに取り組む開発者に最適です。さまざまなツールがコラボレーションとコミュニケーションを促進します。

引用元  <https://datascientest.com/en/azure-devops-vs-github-actions-which-is-the-best-ci-cd-tool>