[英]Jenkins sh run with functions
我有以下腳本。 不幸的是,我無法在詹金斯上運行它。
#!/bin/bash
function pushImage () {
local serviceName=$1
local version=$(getImageVersionTag $serviceName)
cd ./dist/$serviceName
docker build -t $serviceName .
docker tag $serviceName gcr.io/$PROJECT_ID/$serviceName:$version
docker tag $serviceName gcr.io/$PROJECT_ID/$serviceName:latest
docker push gcr.io/$PROJECT_ID/$serviceName
cd ../..
}
function getImageVersionTag () {
local serviceName=$1
if [ $BUILD_ENV = "dev" ];
then
echo $(timestamp)
else
if [ $serviceName = "api" ];
then
echo $(git tag -l --sort=v:refname | tail -1 | awk -F. '{print $1"-"$2"-"$3"-"$4}')
else
echo $(git tag -l --sort=refname | tail -1 | awk -F. '{print $1"-"$2"-"$3"-"$4}')
fi
fi
}
function timestamp () {
echo $(date +%s%3N)
}
set -x
## might be api or static-content
pushImage $1
我在詹金斯上收到此錯誤
10:10:17 + sh push-image.sh api
10:10:17 push-image.sh: 2: push-image.sh: Syntax error: "(" unexpected
我已經將Jenkins全局參數配置為/bin/bash
作為默認的shell執行環境,但是仍然存在相同的錯誤。
這里的主要問題是函數的用法,因為其他已成功執行的腳本沒有任何腳本。
如何解決?
簡短答案:確保您正在執行bash
而不是sh
長答案: sh
(盡管您努力添加shebang仍在此處運行)是bourne shell
,並且不理解function
關鍵字。 只需將其刪除即可解決您的問題。
但是請注意,所有變量擴展都應加引號,以防止出現單詞拆分和亂碼現象。 例如: local version=$(getImageVersionTag "$serviceName")
請參閱shellcheck.net,以獲取文件中出現的更多問題(使用local var=$(...)
)以及缺少引號的摘要列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.