Дженкинс бегать с функциями - PullRequest
0 голосов
/ 28 августа 2018

У меня есть следующий скрипт. К сожалению, я не смог запустить его на Дженкинс.

#!/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 в качестве среды выполнения оболочки по умолчанию, но все еще с той же ошибкой.

Основная проблема здесь при использовании функций, так как другие сценарии, которые были успешно выполнены, не имеют никаких.

Как это можно исправить?

1 Ответ

0 голосов
/ 28 августа 2018

Краткий ответ: убедитесь, что вы используете bash, а не sh

Длинный ответ: sh (который запускается здесь, несмотря на ваши усилия по добавлению шебанга) является bourne shell и не понимает ключевое слово function. Простое удаление решит вашу проблему.

Обратите внимание, однако, что все ваши расширения переменных должны быть заключены в кавычки, чтобы не допустить расщепления и смещения слов. Пример: local version=$(getImageVersionTag "$serviceName")

См. shellcheck.net для получения дополнительной информации о проблемах в вашем файле (использование local var=$(...)) и явном списке фрагментов, в которых отсутствуют кавычки.

...