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