gpt4 book ai didi

bash - Jenkins sh 使用函数运行

转载 作者:行者123 更新时间:2023-12-02 20:17:43 27 4
gpt4 key购买 nike

我有以下脚本。不幸的是我无法在 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

我已经将 Jenkins 全局参数配置为 /bin/bash 作为默认 shell 执行环境,但仍然出现相同的错误。

这里的主要问题是函数的使用,因为其他已成功执行的脚本没有任何函数。

如何解决这个问题?

最佳答案

简短回答:确保您运行的是 bash 而不是 sh

长答案:sh(尽管您努力添加 shebang,但仍在这里运行)是 bourne shell 并且不理解函数 关键字。只需将其删除即可解决您的问题。

但请注意,所有变量扩展都应加引号,以防止分词和通配符。例如:本地版本=$(getImageVersionTag "$serviceName")

参见shellcheck.net有关文件中出现的更多问题(使用 local var=$(...))以及缺少引号的片段的明确列表。

关于bash - Jenkins sh 使用函数运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52055491/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com