概述
最近在頻繁使用阿里云云效的幾款產品,如流水線。之前寫過一篇,參考云效流水線緩存問題。
這篇文章來記錄更多問題。
環境變量
不管是云效流水線Flow還是應用交付AppStack(基于流水線,后文不再贅述),都內置很多環境變量。參考環境變量。
Codeup
阿里云云效的代碼管理,有獨立的子域名:https://codeup.aliyun.com/。
關于代碼倉庫的權限管理,業界有很多不同的做法。據說Google使用同一套代碼倉庫,所有研發有所有Git倉庫的閱讀(View,Clone等)權限。
這在中國不太現實。云效Codeup有很嚴格的權限管理。比如在我司,我作為后端開發,無法查看前端、Python代碼。但是呢,老板又給我布置一個AppStack的調研任務。
不管是在流水線還是AppStack里新增構建,都需要連接到Codeup。
不太確定是流水線的默認設置,還是我們公司代碼倉庫管理員的權限管控設置(大大大概率是后者)。
服務連接默認是【僅自己可見】:
基本信息截圖如下,注意下圖的授權:
但是呢,組織內的任何人都有新增服務連接的權限。
上圖寫錯,應為【可選項】。
由于不能【查看】并使用他人的服務連接,組織內的任何一個開發者想要構建鏡像,并發布到測試環境,要么去找運維來干這個事兒,要么是自己摸索。摸索著摸索著,就新增服務連接。就此埋下隱患。
運維離職。問題暴露。
大面積流水線構建報錯:
日志截圖
排查上述問題時,短暫地看過超管登錄流水線子域名后的界面。乖乖,10多個服務連接,亂得一批。
上述問題的解決方法:【編輯】各個離職人創建的服務連接,選擇一個可用的【服務授權/證書】;而不是針對各個流水線大面積去更換服務連接。
治理
上面提到人人都可新增服務連接,超管設置可收回此權限。
另外【超管或服務連接的創建人】可編輯服務連接,如下圖所示(上面貼過一次):
【指定人員可見】,能給的權限也僅僅只是【使用者】。
可以完全放開為【所有人可見】!!!!!!!
找運維(有權限)編輯管理員(有代碼倉庫的最大權限)創建的服務連接,指定我可見。然后我在流水線里就可以【查看】他人創建的服務連接:
然后可以【查看】所有代碼倉庫的【連接】權限:
而我自己創建的服務連接,其Codeup服務連接對codeup代碼倉庫的可見權限繼承自Codeup(有點繞),僅限于backend組,即后端組Java開發(然后老板還給我指派運維工作。。。)
注意看兩張截圖的下滑滾動條,很明顯上面截圖里代碼倉庫可見范圍大得多。
再來看看Codeup代碼倉庫:
并沒有其他代碼倉庫(如前端)的權限。
也就是說,Codeup服務連接的可見權限和Codeup代碼參考的可見權限完全是兩碼事。
問題
unbound variable
Helm部署報錯:
未綁定變量,大致意思是找不到變量。
解決方法:
failed to compute cache key: failed to compute checksum of ref: not found
構建報錯截圖如下:
解決方法:
ContextPath增加一個點解決問題。
invalid reference format
構建報錯截圖如下:
解決方法:
- 刪除替換語法:即寫成,不便之處,無法和其他鏡像TAG命名樣式保持一致(harbor.tesla.com/rag/rag-online:test-ec85d8f3-20250411191733),而變成
2025-04-11-19-17-33
- 替換使用的構建集群,如阿里云自帶的構建集群
failed to resolve dial up timeout
構建報錯截圖如下:
排查過程:
登錄到流水線執行集群(機器)上,執行docker images命令:
解決方法:修改Dockerfile的FROM命令。
之前是FROM base_agent:latest
,
修改為FROM harbor.gpu.tesla.com:543/nlp/base_agentbase_agent:latest
。
repo app not found
構建報錯截圖如下:
排查下來,是流水線源選錯:
解決方法:不是選擇Helm代碼倉庫,而是選擇業務代碼倉庫。
unexpected status from PUT request to 404 Not Found
構建報錯截圖如下:
報錯日志:
ERROR: error writing manifest blob: failed commit on ref "sha256:b60c3b6e1eaf71deb9214e57eeaaa078d971f07afe28b0687b9f4ee459bf069d": unexpected status from PUT request to https://harbor.gpu.tesla.com:543/v2/nlp/agent/manifests/flow-docker-build-cache: 404 Not Found> importing cache manifest from harbor.gpu.tesla.com:543/nlp/agent:flow-docker-build-cache:exporting cache to registry:
ERROR: failed to solve: error writing manifest blob: failed commit on ref "sha256:b60c3b6e1eaf71deb9214e57eeaaa078d971f07afe28b0687b9f4ee459bf069d": unexpected status from PUT request to https://harbor.gpu.tesla.com:543/v2/nlp/agent/manifests/flow-docker-build-cache: 404 Not Found
報錯原因顯而易見,鏡像緩存地址多了個v2。
報錯原因,之前選擇的是遠端緩存:
解決方法:選擇本地緩存。
構建參數
error: failed to solve: rpc error: code = Unknown desc = executor failed running [ ] exit code: 1
構建報錯截圖如下:
類似報錯:
類似報錯:
解決方法:
使用私有內部構建集群(節點)
注意點:
- 不能使用
${DATETIME//-/}
格式(報錯如上),使用${DATETIME}
; - 鏡像緩存使用本地緩存。
原始日志中文亂
如下圖所示,流水線里不能查看超過30天之前的日志。
但是可以點擊【查看原始日志】
中文亂碼:
這咋看?阿里云的Bug。
解決方法:點擊上面截圖里的【下載日志】,然后在本地查看