引言:
在進行使用 GitLab CI 整合 Harbor 的過程中,我意外地踩到了一個奇怪的 Bug。這個問題源自於 Harbor 的 Robot Account,當中包含 “$” 符號,導致在 GitLab CI 中出現身份驗證錯誤。在這篇文章中,我將分享我的發現和解決方法,同時介紹 Harbor 和 GitLab CI 的基本概念,以及如何最有效地配置它們。
發現問題:帳號中的 “$” 符號引起的身份驗證錯誤
在使用 Harbor 的 Robot Account 時,我發現創建的帳號名稱包含 “$” 符號,例如 robot$gitlab-ci
。我將這個帳號直接放到 GitLab CI 的變數中,但每次執行時都會遇到以下錯誤:
Error response from daemon: Get "https://harbor.clarence.tw/v2/": unauthorized: authentication required
解決方法:使用雙 “$” 符號和 –password-stdin
通過參考 Harbor GitHub Issue #9732,我發現解決方法是在 GitLab CI 專案的 Runner 環境設置中使用雙 “$$” 符號,並結合 --password-stdin
,例如:
echo "$HARBOR_PASSWORD" | docker login -u robot$$gitlab-ci --password-stdin harbor.clarence.tw
這樣就能正常登錄而不再出現身份驗證錯誤。
Docker 登入提示輸入的情況
在解決問題之前,我試圖直接使用以下命令登入 Harbor,卻發現它提示輸入帳號和密碼,並成功登入:
sudo docker login harbor.clarence.tw Username: robot$gitlab-ci Password:
這是因為 Docker 在交互模式下可以處理特殊符號的輸入,但在 CI/CD 環境下可能會遇到問題,因此建議使用雙 “$$” 符號的方式在腳本中處理登入。
了解 Harbor 和 GitLab CI
在解決問題之前,讓我們先簡單介紹一下 Harbor 和 GitLab CI。
Harbor 是什麼?
Harbor 是一個企業級的容器倉庫,它提供了安全、可信賴的容器映像管理和分發。使用 Harbor,您可以方便地存儲、分享和分發 Docker 鏡像。
GitLab CI 是什麼?
GitLab CI/CD 是 GitLab 提供的持續集成和持續交付工具。它允許您定義、測試和部署您的代碼,並與 GitLab 存儲庫集成。
如何配置 GitLab CI 以整合 Harbor
在您的 GitLab CI 設置中,確保在使用 Harbor 的 Robot Account 時使用雙 “$$” 符號和 --password-stdin
,以避免身份驗證問題。以下是一個簡單的例子:
stages: - build build_image: stage: build script: - echo "$HARBOR_PASSWORD" | docker login -u robot$$gitlab-ci --password-stdin harbor.clarence.tw - docker build -t harbor.clarence.tw/myproject/myimage:latest . - docker push harbor.clarence.tw/myproject/myimage:latest
總結
這次的 Bug 雖然讓我花了一些時間來解決,但通過在 GitLab CI 的 Runner 環境設置中使用雙 “$$” 符號和 --password-stdin
,我成功地解決了身份驗證問題。希望這篇文章對遇到類似問題的人有所幫助。
《AWS CDK 完全學習手冊:打造雲端基礎架構程式碼 IaC》
第 12 屆 iT 邦幫忙鐵人賽 DevOps 組冠的《用 CDK 定 義 AWS 架構》
第 11 屆 iT 邦幫忙鐵人賽《LINE bot 好好玩 30 天玩轉 LINE API》
一個熱愛分享的雲端工程師!