繁体   English   中英

Jenkins sh运行功能

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM