Пример 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