我有以下脚本。不幸的是,我无法在Jenkins上运行它。
Sqlite3 views
我在Jenkins上收到此错误
#!/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
我已经将Jenkins全局参数配置为10:10:17 + sh push-image.sh api
10:10:17 push-image.sh: 2: push-image.sh: Syntax error: "(" unexpected
作为默认的shell执行环境,但是仍然存在相同的错误。
这里是函数使用方面的主要问题,因为成功执行的其他脚本没有任何内容。
该如何解决?
答案 0 :(得分:1)
简短的回答:请确保您正在运行bash
而不是sh
长答案:sh
(尽管您努力添加shebang仍在此处运行)为bourne shell
,但不理解function
关键字。只需将其删除即可解决您的问题。
但是请注意,您所有的变量扩展名都应加引号,以防止单词拆分和乱序。例如:local version=$(getImageVersionTag "$serviceName")
有关文件中出现的更多问题(使用local var=$(...)
)和缺少引号的摘要列表,请参见shellcheck.net。