Jenkins job для генерации swagger API

Пример jenkins джобы для генерации swagger-API. 

Это bash-код, который нужно добавить в секцию "execute shell".

#!/usr/bin/env bash
set -o errexit
set -o errtrace
set -o nounset
set -o pipefail
set -o xtrace

git config --global user.email "your-email@example.com"
git config --global user.name "Name Surname"

# source: http://stackoverflow.com/questions/4023830/how-compare-two-strings-in-dot-separated-version-format-in-bash
vercomp () {
    if [[ $1 == $2 ]]
    then
        return 0
    fi
    local IFS=.
    local i ver1=($1) ver2=($2)
    # fill empty fields in ver1 with zeros
    for ((i=${#ver1[@]}; i<${#ver2[@]}; i++))
    do
        ver1[i]=0
    done
    for ((i=0; i<${#ver1[@]}; i++))
    do
        if [[ -z ${ver2[i]} ]]
        then
            # fill empty fields in ver2 with zeros
            ver2[i]=0
        fi
        if ((10#${ver1[i]} > 10#${ver2[i]}))
        then
            return 1
        fi
        if ((10#${ver1[i]} < 10#${ver2[i]}))
        then
            return 2
        fi
    done
    return 0
}

testvercomp () {
    vercomp $1 $2
    case $? in
        0) op='=';;
        1) op='>';;
        2) op='<';;
    esac
    if [[ $op != $3 ]]
    then
        echo "FAIL: Expected '$3', Actual '$op', Arg1 '$1', Arg2 '$2'"
    else
        echo "Pass: '$1 $op $2'"
    fi
}


SERVICE_PATH="${SERVICE}-service"
CLIENT_PATH="${SERVICE}-client-${LANGUAGE}"

# Clone service and client
git clone "git@github.com:organization/${SERVICE}-service.git" "${SERVICE_PATH}"
git clone "git@github.com:organization/${SERVICE}-client-${LANGUAGE}.git" "${CLIENT_PATH}"

# Get latest tag from service
SERVICE_VERSION=$(git --git-dir "${SERVICE_PATH}/.git/" --work-tree "${SERVICE_PATH}/" tag -l | sort -V | tail -n 1 | sed 's/^v//')
CLIENT_VERSION=$(git --git-dir "${CLIENT_PATH}/.git/" --work-tree "${CLIENT_PATH}/" tag -l | sort -V | tail -n 1 | sed 's/^v//')

if [ -z "$SERVICE_VERSION" ]; then
  SERVICE_VERSION="none"
fi

if [ -z "$CLIENT_VERSION" ]; then
  CLIENT_VERSION="none"
fi


if [ "$SERVICE_VERSION" == "none" ]; then
  echo "Service has no versions"
  exit 1
fi

if [ "$CLIENT_VERSION" != "none" ]; then
  if [ vercomp "${CLIENT_VERSION}" "${SERVICE_VERSION}" ">" || vercomp "${CLIENT_VERSION}" "${SERVICE_VERSION}" "=" ]; then
    echo "Client version ${CLIENT_VERSION} greater than or equal to ${SERVICE_VERSION}"
    exit 1
  fi
fi


# Remove all files from the client
find "${CLIENT_PATH}/" \
    -not -wholename "*/.git*"\
    -not -path "${CLIENT_PATH}/" \
    -delete

wget "http://central.maven.org/maven2/io/swagger/swagger-codegen-cli/${SWAGGER_VERSION}/swagger-codegen-cli-${SWAGGER_VERSION}.jar" \
  --no-verbose \
  --output-document swagger-codegen-cli.jar

java -jar swagger-codegen-cli.jar generate \
    --input-spec "${SERVICE_PATH}/${SWAGGER_FILE}" \
    --lang "${LANGUAGE}" \
    --output "${CLIENT_PATH}" \
    --config "${SERVICE_PATH}/web/swagger-config-${LANGUAGE}.json" \
    --artifact-version "v${SERVICE_VERSION}"

if [ -d "${CLIENT_PATH}/SwaggerClient-${LANGUAGE}/" ]; then
  mv ${CLIENT_PATH}/SwaggerClient-${LANGUAGE}/* "${CLIENT_PATH}/"
  rm -rf "${CLIENT_PATH}/SwaggerClient-${LANGUAGE}/"
fi

# Tag a new release and push it
GIT_ARGS="--git-dir "${CLIENT_PATH}/.git/" --work-tree ${CLIENT_PATH}"

git ${GIT_ARGS} checkout -b "v${SERVICE_VERSION}-auto"
git ${GIT_ARGS} add --all
git ${GIT_ARGS} commit --message "v${SERVICE_VERSION}"
git ${GIT_ARGS} tag "v${SERVICE_VERSION}"
git ${GIT_ARGS} push -f origin "v${SERVICE_VERSION}-auto"
git ${GIT_ARGS} push --tags

 

 
 

icon Комментарии 0

Ваш комментарий к статье.. (для авторизованных)

ctrl+enter

icon Вход в систему

зарегистрироваться
НОВЫЕ ПОЛЬЗОВАТЕЛИ