Azure DevOpsとOracle Cloudを連携してみた

# はじめに
マルチクラウド環境になった際に既存のDevOps環境はどうすればよいのかというご質問がありましたのでAzure DevOpsとOracle Cloudの連携を行いテストコードを実行してみました。


# 目次
1.[今回の構成](https://qiita.com/drafts/eebd9632ecda4d55746a/edit#1%E4%BB%8A%E5%9B%9E%E3%81%AE%E6%A7%8B%E6%88%90)
2.[連携の実施](https://qiita.com/drafts/eebd9632ecda4d55746a/edit#2%E9%80%A3%E6%90%BA%E3%81%AE%E5%AE%9F%E6%96%BD)
3.[まとめ](https://qiita.com/ogacloud/items/04b0da608633b66077f6#3%E3%81%BE%E3%81%A8%E3%82%81)
4.[参考ドキュメント](https://qiita.com/ogacloud/items/04b0da608633b66077f6#4%E5%8F%82%E8%80%83%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88)


# 1.今回の構成
今回の構成はこちらになります。GithubとAzure DevOpsを連携し、Self HostedエージェントをインストールしたOracle Cloud上のWindowsサーバに対して操作を実行する形となります。
![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2172788/a900b595-936e-9606-cea3-d85f77e0010d.png)

また、今回使用するエージェントは3種のエージェントの中からSelf Hostedエージェントを使用して検証を実施しています。
![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2172788/0ffe25c4-e1f3-590b-73fa-91002d7e5ca8.png)




[参照][Azure Pipelines エージェント](https://learn.microsoft.com/ja-jp/azure/devops/pipelines/agents/agents?view=azure-devops&tabs=yaml%2Cbrowser)





# 2.連携の実施
Oracle Cloudにログインしコンソールからパブリックサブネットで連携用のWindowsサーバを作成します。
![図4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2172788/312b1ad6-81cc-01fa-f7c7-875d39e8d80e.png)
[参考][インスタンスを作成する](https://oracle-japan.github.io/ocitutorials/beginners/creating-compute-instance/)
これでOracle Cloud側のインフラ準備は完了です。

Azure DevOpsのページに移動し[Start free]を選択します(利用ユーザーにアカウントがある環境を想定しAzure DevOpsの登録設定は省略しています)。
![図5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2172788/850034d9-ce30-7398-8c43-f560cfa3dc2c.png)

Azure DevOpsのページから[+New Project]を選択しOracle Cloud用のプロジェクトを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2172788/a3e62210-7f4f-6940-2eb0-1db9548749f4.png)

[Organization settings]→[Pipelines]→[Agent Pools]→[Add Pool]を選択しSelf-Hostedを選んだあと[Create]を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2172788/f9330ee0-3bc8-3dfe-24dd-79bc6ff8bcde.png)

次にAzure DevOps認証用のパスワードの代わりとしてPAT(パーソナルアクセストークン)を使用します。
Azure DevOpsの右上の[ユーザーアイコン]→[Personal Access Token]→[+New Token]→[Create]を選択します。
※トークンスコープをAgent Pools (Read＆manage)に設定
※永続しないように期限を30日に設定します。
[公式手順][個人用アクセス トークンを使用する](https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops&tabs=Windows)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2172788/a9015790-d00e-4b64-90e5-a12e449a0fdc.png)


作成した Agent Poolを開いて「New agent」を選択します。
※WindowsサーバのためWindowsの実行コマンド項目を確認します。
※エージェント プログラムのインストール パッケージ（.ZIP ファイル）のダウンロード リンクと「Create the agent」「Configure the agent」「Optionally run the agent interactively」のコマンドラインも、控えておきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2172788/31274afa-0d25-df87-6916-2f4517543d27.png)

Oracle CloudのサーバにRDPでログインし先ほどのコマンドを使用しAzure DevOpsとの連携コマンドを実施していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2172788/7e747099-aac6-3986-08f1-df9f6088ad9b.png)
連携コマンドが完了したらAzure DevOpsポータルに戻り[Agent]タブからサーバが連携できたか確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2172788/29d18132-128d-88e7-f7a2-942dfb57078b.png)

コードを実行するためのPipelineを作成します。接続先として[Github]を選択します(Githubアカウントの作成手順などは省略しています)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2172788/82e4c360-1fb9-20e9-2508-9d0a940b1ca2.png)
自身のアカウントを選択しrepogitoryとして利用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2172788/2a74fb94-75b7-d331-2200-186878acd4c2.png)

Pipelineとして[Starter pipeline]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2172788/033614c5-caa8-4d41-ed67-a110db30c0f4.png)

連携確認コマンド実行のためのYAML構文を作成します。
完了後[Save and run]を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2172788/ab6dd5db-3c3a-5d51-abbf-ab701a449a78.png)


Oracle Cloudのサーバで実行結果を確認します(Failed or Succeededが表示されます)。

実行ジョブから過程のログも確認し問題ないことが確認できれば完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2172788/cd4c83a4-d535-d1f0-722f-cd728196bd2a.png)

# 3.まとめ
今回にはAzure DevOpsとOracle Cloudの基本的な連携を実施しました。
実際に運用する実用レベルの応用としては以下のようなことも可能です。
1.Terraformを利用したIaaSベースの環境のデプロイの実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2172788/91b47d1b-06f1-a792-3e3d-9a6b91d79213.png)
2.Kuberbetesベースの環境のデプロイの実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2172788/65510ccd-e80b-6a2a-3880-d8b3492ff34e.png)
3.redgateやLiquibaseなどを利用したOracle Databaseの操作
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2172788/e8a22e51-48df-70b9-5f51-08e5a429c697.png)
このようにマルチクラウド環境でも様々なDevOps連携ができますので是非検証と実行を試してみてください。




# 4.参考ドキュメント
こちらは今回の検証の際に確認したドキュメントになります。
・[Oracle Linuxを用いたAzure DevOpsとの連携方法の解説](
https://www.youtube.com/watch?v=-rkT1VPfhR8)
・[DevOps の Self-hosted エージェントを構築して使ってみよう！](https://jpdscore.github.io/blog/azuredevops/try-self-hosted-agent/)
・[Oracle Cloudを使用したLinux上でのAzure DevOpsビルド・エージェントのホスト](https://stephan-bester.medium.com/hosting-an-azure-devops-build-agent-on-linux-using-oracle-cloud-1ae9332231de)
・[Azure DevOps Services の料金体系をおさらいしてみよう！](https://jpdscore.github.io/blog/azuredevops/DevOpsPricing/)