常見問題 DevSecOps
了解有關使用 DevSecOps 的常見問題解答。
CI 和 CC 管道有什麼區別?
您可能會注意到 CI 和 CC 管道有共同的步驟。 運行的掃描和檢查在性質和細節上相似。 下表提供了 CI 和 CC 管道之間的差異。
| CI管道 | CC管道 |
|---|---|
| 它是 CI 工具鏈的一部分。 | 它是 CC 工具鏈的一部分。 |
合併請求與合併請求合併後觸發 master 分支 |
它可以手動觸發,也可以按照獨立於部署計劃的預定義時間間隔觸發。 |
| 應用程式 URL 和應用程式碼儲存庫詳細資訊是設定程序的一部分。 | 應用程式 URL 和應用程式碼 repo 詳細資訊會在 CC 工具鏈設定完成後、首次管道執行啟動前提供。 |
| 作為合規性檢查期間各種掃描和檢查的一部分創建的事件問題沒有截止日期。 | 作為合規性檢查期間各種掃描和檢查的一部分創建的事件問題帶有截止日期。 |
| 創建的事件問題是在建置過程中發現的。 | 創建的事件問題是在定期掃描臨時或生產環境期間發現的。 |
這 summary.json 每次 CI 管道運行結束時不會產生檔案。 |
這 summary.json 每次 CI 管道運行結束時不會產生檔案。 |
| 它包括應用程式工件建立、工件簽署和部署到開發叢集等步驟。 這反過來又為 CD 管道創建輸入。 | 它僅運行合規性測試所需的掃描和檢查。 |
用戶如何自訂管道?
管道是透過使用自訂腳本來自訂的。 自訂腳本是管道中的擴充點,採用者、團隊和使用者可以提供腳本來為其 CI/CD 策略執行自訂任務。
自訂腳本控制管道階段。 您可以使用設定檔 (pipeline-config.yaml) 配置階段的行為、腳本內容以及執行腳本的基礎工件。 管道階段的腳本和配置是從應用程式儲存庫載入的,類似於 .travis.yml 或者 Jenkinsfile 或自訂儲存庫。
有關更多信息,請參閱 使用自訂腳本自訂管道。
s390x 和 Power 平台限制的多架構映像
One-Pipeline 在 one-pipeline 設定檔中使用 runtimeClassName (表示運行時設定檔的字串) 為 s390x 和 Power 平台提供本機支援。 但是,這種本機支援也有一些
限制和建議:
- 限制:
- 此功能僅在 v11 中提供。
- pod 的啟動時間高於 x86 runtime class。
- 您必須在 s390x 或 Power 工作負載中使用 podman。 Docker 無法使用。
- 使用者指令碼需要更新以使用 podman 指令而非 docker 指令
- 舞台影像應該已經安裝 podman。
- 建議:使用 x86 運行時類別來處理
- 掃描,因為各種掃描工具影像可能不支援多檔案。
- 映像簽章,因為沒有多架構支援 (工作進行中)。
該如何建立自訂的多架構基礎映像?
One Pipeline 提供了一個官方的多架構基礎映像,支援以下平台:
linux/amd64linux/ppc64lelinux/s390x
對於大多數使用情境,我們建議直接使用官方基礎映像:
icr.io/continuous-delivery/toolchains/devsecops/baseimage:<version>
如果您的應用程式需要額外的作業系統套件、語言執行環境或其他自訂依賴項,您可以將建立專屬的多架構基礎映像納入您的 CI 管道中。
請在您的 build-artifact 步驟中,使用 Docker Buildx 並搭配 --platform 選項:
docker buildx build \
--platform linux/amd64,linux/ppc64le,linux/s390x \
-t <registry>/<namespace>/<image>:<tag> \
--push .
此操作會建立特定架構的映像,並將其發佈為單一的多架構映像清單。 容器執行環境會自動從目標平台拉取適當的映像檔。
建議的做法
- 請在您的 Dockerfile 中將 One Pipeline 基礎映像用作
FROM映像。 - 請僅新增您的應用程式所需的額外套件或依賴項。
- 請在您的 CI 管道中,使用 Docker Buildx 來建置並發佈映像檔。
- 請使用
docker buildx imagetools inspect或skopeo inspect驗證已發佈的圖片。
有關多架構支援及其限制的更多資訊,請參閱 《 s390x 和 Power 平台多架構映像檔的限制 》。
使用 CLI 觸發管道
可以使用 IBM Cloud CLI 或 API 觸發管道。 使用 CLI,您可以透過提供工具鏈和管道 ID 來啟動管道。 使用 API,您可以傳送具有正確認證和標頭的 POST 請求來觸發管道。
如需詳細資訊,請參閱 使用觸發器
複製 Git 儲存庫時會使用哪個環境變數?
DevSecOps 的管道採用分層代幣系統,用於驗證 Git 儲存庫的操作,包括複製。 git-token 環境屬性用作預設憑證,但您可以使用更具體的憑證來覆寫它,以提升安全性與存取控制。
代幣優先順序
此處理流程會依照以下優先順序(由高至低)解析 Git 的驗證憑證:
- 特定儲存庫的工具鏈整合中指定的個人存取憑證 (PAT)
- 儲存庫專用代幣:
git-token-[repo_name]-[repo_org] - 特定組織的代幣:
git-token-[repo_org] - 預設代幣:
git-token - OAuth 代幣 來自工具鏈整合(若使用 OAuth 而非 PAT)
代幣命名範例
針對位於 https://github.com/my-org/my-app 的儲存庫:
- 特定儲存庫:
git-token-my-app-my-org - 特定於組織:
git-token-my-org
重要考量
- 如果同一個
git-token同時用於讀取儲存庫(克隆)和寫入操作(設定 PR/CI 狀態、更新清單),僅有唯讀權限是不夠的。 該代幣必須具備寫入權限。 - 使用儲存庫或組織專屬的憑證,可讓您遵循最小權限原則,僅授予每個儲存庫所需的權限。
如需進一步了解儲存庫代幣功能,請參閱《 檢索儲存庫資訊與代幣 》。
如何測試對 OnePipeline 設定所做的變更?
測試 OnePipeline 設定的變更時,必須採取系統化的方法,以確保在驗證自訂設定的同時,不會中斷生產環境的管道運作。
了解 OnePipeline 的組成部分
OnePipeline 包含兩個主要的可自訂元件:
-
Tekton 管道定義:針對 PR、CI、CD 和 CC 工作流程的集中管理管道定義,可於 compliance-pipelines 儲存庫中 取得。 新版本每兩週的衝刺週期發布一次。
- v10:穩定版本,並發處理能力有限
- v11:具備最高客製化彈性與並行處理能力的次世代版本
-
管線設定檔 (
.pipeline-config.yaml):自訂設定檔,用於覆寫預設管線行為,包括管線映像檔、腳本、架構及屬性。 此檔案可儲存於您的應用程式儲存庫中,或儲存於集中式設定儲存庫中。
測試方法 1:使用測試設定檔
這是測試配置變更而不影響生產環境管道的建議做法。
-
建立一個測試分支
- 在包含您的
.pipeline-config.yaml檔案的儲存庫中建立一個分支 - 請在此分支中進行設定變更
- 在包含您的
-
設定測試觸發器
- 在您的工具鏈中複製現有的管線觸發器
- 請清楚命名(例如:
Manual-Test-Config) - 更新觸發器屬性,使其指向您的測試設定:
pipeline-config: 您的設定檔檔名pipeline-config-branch: 您的測試分支名稱pipeline-config-repo: 儲存庫 URL 包含相關設定
-
在開發模式下進行測試
- 在觸發器屬性中啟用 開發模式
- 執行管線以驗證您的自訂腳本
- 開發模式會跳過證據蒐集、合規問題建立及清單更新等步驟,因此非常適合快速迭代
- 重要:開發模式不適用於生產環境的工作負載
-
包含合規性檢查的測試
- 在開發模式下驗證腳本後,請停用
dev-mode - 在測試期間保持庫存更新功能停用
- 執行包含證據蒐集與問題管理的完整流程
- 確認所有合規檢查均如預期通過
- 在開發模式下驗證腳本後,請停用
-
提升至正式作業
- 當測試結果令人滿意時,請建立拉取請求,將您的變更合併至主分支
- 這些變更將自動套用至生產環境的觸發器
- 若發生問題,您可以迅速還原這些變更
測試方法 2:修改管線佈局
分支管線定義 (進階)
- (分叉 compliance-pipelines 儲存庫 )
- 在您的分支中開發並測試變更
- 將分叉的儲存庫作為 Git 整合功能加入您的工具鏈中
- 暫時更新管道定義,使其引用您的分支
- 設定 開發模式 觸發器,以測試新的管線定義
- 請依照方法 1 的測試步驟操作
最佳作法
- 請務必先在開發模式下進行測試,以便迅速發現腳本錯誤
- 請為測試觸發器使用具描述性的名稱,以避免混淆
- 請在提交訊息中記錄您的設定變更
- 請保持測試觸發器處於停用狀態,或在測試完成後將其刪除,以避免意外執行
- 建議針對重大流程變更建立專用的測試工具鏈
- 請仔細檢視管線日誌,以確保所有階段皆能如預期般執行
如需有關自訂管線的更多資訊,請參閱「自訂腳本」及