專案之後的建置要用Unity Cloud Build(UCB),趁著現在被一些不確的Mirror寫法卡住時,先花點時間把一些之後建置的瑣事處理一下。
利用Dockerfile進行處理,在由外部給私密的參數,則可以利用UCB的API就進行設定或是資料取得。
FROM alpine:latest as create-project
ARG ORG_ID
ARG API_KEY
RUN apk update && apk add curl
RUN curl \
-X GET \
-H "Authorization: Basic ${API_KEY}" \
"https://build-api.cloud.unity3d.com/api/v1/orgs/${ORG_ID}/billingplan"
然而在使用其它API時,特別是使用POST和PUT進行產生和更新時,會碰到拿取Json Data時的問題。而這個問題,找了網路上很多討論,但不管怎麼試,就是解決不了。先不談論過程,其實目地是很單純的,利用UCB API在專案開始的時候建立buildtarget還有給予所有相關的設定,以方便之後進行build時用。就是這麼簡單的想法,但是碰到了產生或是更新的需求時,在curl
裡的data參數,就是需要放入json。單然可以直接放入一整串的json,但這串有可能會有些變數,在設定上較有彈性。就是這樣的想法,弄了老半天,都沒有成功。接下來就來談談過程。
相當然爾,不了解的部份都是查詢google的文章。而找到的文章主要是用EOF也就是here-doc來進行。
純以在terminal裡執行,這看起來很像是解決方案,但在Dockerfile裡執行時,就不是很清楚前面加上了RUN之後要怎麼進行,因為EOF似乎並不吃後面換行用的斜線。所以針對這個問題又再度查詢解決方案
這個方案看起來是用一個function將EOF裡的json包起來
my_function() {
cat << EOF
{
"key": "value",
}
EOF
}
然後試過各式各樣的方式,就是沒有辦法將這段塞到curl的data參數裡。想以就想那直接以檔案的方式進入到curl裡,參考了這篇
也是一樣,完全無法成功。常碰到
這是討論裡的一行quote
Putting JSON strings in shell commands like curl is a notorious pain in the neck, as you are discovering.
怎麼試就是不行,所以就想那換個shell,直接用powershell來處理
FROM mcr.microsoft.com/powershell:lts-alpine-3.10
找到了Invoke-WebRequest,應該可以用它來代替curl,沒想到怎麼試都會出現
{"error":"The requested object was not found."}
結果,這篇討論裡有提到第六版後就被移掉,而用Docker拿的是第七版,所以沒有這個cmdlet
但又回到了官方的文件裡第七版也確實是還有這個cmdlet。
只是有歸有,一樣是不能用。試了老半天還是有問題。得到的結論就是json資料在bash或是powershell都很難用。看樣子,還是直接用nodejs可能不會浪費這麼久的時間。只能說今天非常的不適合開發。