[英]Gitlab CI/CD create and use custom user functions
我嘗試在我的 gitlab 配置文件中創建這樣的 function :
deploy:
stage: dev
services:
- docker:dind
script:
- myFunction () { api_pl_tmp=$(curl -s --header "PRIVATE-TOKEN: $TOKEN_VAR" "https://git.example.ru/api/v4/projects/1/pipelines/latest" | jq .) }
- while myFunction; do
- if [ $(echo $api_pl_tmp | jq -r .status) = "success" ]
- then
- export PROJECT_CURRENT=$($api_pl_tmp | jq -r '{id:.id,sha:.sha[0:8]}' | base64)
- break
- fi
- if [ $(echo $api_pl_tmp | jq -r .status) = "failed" ]
- then
- echo "Error: Frontend can't be deployed!"
- exit 1
- fi
- if [ $(echo $api_pl_tmp | jq -r .status) = "running" ]
- then
- echo "Wait 5 sec... Frontend deploying!"
- sleep 5
- else
- echo Unknow status $(echo $api_pl_tmp | jq -r .status)
- exit 1
- fi
- done
但它不起作用,gitlab 向我返回錯誤消息:
此 GitLab CI 配置無效:jobs:deploy-to-dev:script 配置應該是字符串或最多 10 級深度的字符串嵌套數組
我該如何解決這個問題,或者我的自定義 function 中有錯誤?
-
將命令與介於兩者之間的命令分開。 將您的命令作為一個命令,而不是多個命令。 請記住,它們是用空格連接的。
您的腳本的問題是冒號 - 請參閱https://gitlab.com/gitlab-org/gitlab-foss/-/issues/30097 。
deploy:
stage: dev
services:
- docker:dind
script:
- "colon=:"
- myFunction () {
api_pl_tmp=$(curl -s --header "PRIVATE-TOKEN$colon $TOKEN_VAR" \
"https$colon//git.example.ru/api/v4/projects/1/pipelines/latest" | jq .);
}
- while myFunction; do
if [ $(echo $api_pl_tmp | jq -r .status) = "success" ]; then
export PROJECT_CURRENT=$($api_pl_tmp | jq -r '{id:.id,sha:.sha[0:8]}' | base64);
break;
fi;
if [ $(echo $api_pl_tmp | jq -r .status) = "failed" ]; then
echo "Error$colon Frontend cant be deployed";
exit 1;
fi;
if [ $(echo $api_pl_tmp | jq -r .status) = "running" ]; then
echo "Wait 5 sec... Frontend deploying!";
sleep 5;
else
echo Unknow status $(echo $api_pl_tmp | jq -r .status);
exit 1;
fi;
done
還有jq.) }
缺少一個;
. 首先在您自己的 shell 中檢查您的腳本。 使用https://shellcheck.net檢查您的腳本。
另外$($api_pl_tmp
缺少回顯,並且引用存在很多問題。使用一致的縮進並嘗試編寫可讀的代碼以最大程度地減少拼寫錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.