iT邦幫忙

2023 iThome 鐵人賽

DAY 30
0

最後一篇文章,要來介紹 Pulumi 與 CI/CD 系統的整合。

Pulumi 官方文件中,有列出了支援的 CI/CD 系統列表。如果要使用的系統不在列表上,也可以透過手動設定的方式,支援任意的 CI/CD 系統。

Pulumi 與 CI/CD 系統整合了什麼?

為什麼 Pulumi 需要特別針對不同的 CI/CD 系統做整合呢?不就在 CI/CD 上,設定執行 pulumi preview 或是 pulumi up 指令就好了嗎?

的確,執行 CI/CD 就是靠著在系統上執行這兩個指令就可以了,但 Pulumi 會搜集 CI/CD 系統提供的資訊,將所執行的 git commit sha1 id、branch name 等資訊上傳至 Pulumi Cloud 中。就可以在 Cloud 中方便追蹤不同的變更是由哪個 git commit 造成的。

如下圖所示,可以看到這個 update 的 git commit id 與 branch name。

https://ithelp.ithome.com.tw/upload/images/20231015/20162822TrJGIOumJC.png

GitHub 整合

要設定 GitHub 整合、並使用 GitHub Action 做為 CI/CD 系統的話,可以參考官方的設定文件範例

範例中是將 Cloud Provider 的 Secret 存放在 GitHub 的 Secret 中,不過我建議直接將 Secret 寫入 Stack 中。這些 Secret 內容,會透過 secret provider 進行加密,可以放心的將內容簽入版本控制系統內。且之後如果要使用 Pulumi Cloud 提供的 Deployment 功能做到自動部署,還是會需要將這些資訊放入 Stack 中。

以下是將AWS provider 的 AKSK 的設定至 Secret 的指令:

$ pulumi config set aws:accessKey xxxxxx --secret
$ pulumi config set aws:secretKey xxxxxx --secret

由於很多的 Secret 內容都是跨專案共用的,因此最近 Pulumi 推出了 Pulumi ECS ,專門用來管理跨專案環境的 Secret。

GitHub App

Pulumi 官方有提供專屬的 GitHub App,可以安裝在帳號或組織中使用。這個 GitHub App 主要功能是在 PR 內留言通知該 PR 的 Preview 結果。

如下圖所示,官方的 GitHub App 會在執行完 Preview 顯示資源變更的列表。
https://ithelp.ithome.com.tw/upload/images/20231015/20162822YTErBesBKL.png

點擊訊息中的網址,還能進入 Pulumi Cloud 中查看詳細的 diff 內容。

https://ithelp.ithome.com.tw/upload/images/20231015/20162822UVSlHRsFap.png

Deployment、Review Stack

除了使用第三方的 CI/CD 之外,Pulumi 官方也有提供類似的功能——Deployment。

只要在 Stack 的設定頁面中,設定 Deploy 相關資訊,就能自動在 Pulumi Cloud 上執行 Preview 與部署雲端資源的異動。
https://ithelp.ithome.com.tw/upload/images/20231015/20162822iIPWmK5MDK.png

PR Stack

而在 Pulumi Cloud 的 Deployment 中,最酷的功能就屬 Use this stack as a template for pull request stack 這個選項了!

當這個選項打勾時,Pulumi 就會自動產生 PR Stack。

PR Stack 是一個臨時的 Stack,會真正的執行 pulumi up 部署所有資源。當 PR 被 Merge 或是 Close 後,會自動執行 pulumi destroy 刪除這個 PR Stack。

當這個 PR Stack 建立好後,也會透過 GitHub App 在該 PR 中留言,列出該 Stack 的所有 Outputs 資訊。
https://ithelp.ithome.com.tw/upload/images/20231015/20162822C8GA2snzmS.png

應用方式

PR Stack 除了可以用來測試撰寫的 IaC 是否可以成功部署以外,還可以用來做為應用程式開發時的 Review App。

Review App 這個概念指的是在 PR 中,將 PR 內的程式部署至臨時環境中供 reviewer 測試。

例如說,有一個網頁前端的 GitHub repository,在裡面使用 Pulumi 創建 Kubernetes Deployment 的方式部署。就可以裡用 PR Stack 的功能,讓每個 PR 都將網頁部署至 k8s cluster 中。這樣就可以方便 PR reviewer 直接看到運行結果。而 PR 被 merge 或是 close 後,這個 kubernetes deployment 就會被刪除。

總結

終於完成了 30 篇文章來介紹 Pulumi 了!終於結束每天趕在 12 點前送出文章的日常了,雖然知道先將文章寫起來,可以比較有時間修改文章,讓文章更通順。但很可惜的拖延症嚴重患者做不到,甚至有些日子是拖到 11 點才開始撰寫......第 30 天也是趕著最後一分鐘發布啊......

回歸正題,這次挑戰的範例都有在 GitHub 上,並用 5 種程式語言撰寫。
後面文章的範例就容我慢慢補上,有些程式語言很久沒寫了,改起來有點生疏。雖然現在生成式 AI 很流行,不過像是 Pulumi 這種比較新的套件,AI 沒有建立太多資料,還是比較難透過 AI 協助撰寫,


上一篇
[Day 29] AWSx (Pulumi Crosswalk for AWS) 介紹
系列文
30 天學習 Pulumi:用各種程式語言控制雲端資源30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言