Skip to content

Instantly share code, notes, and snippets.

@json-m
Last active October 17, 2021 00:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save json-m/cd9a61734d85ae7b8c6187826141ef88 to your computer and use it in GitHub Desktop.
Save json-m/cd9a61734d85ae7b8c6187826141ef88 to your computer and use it in GitHub Desktop.
teamcity local docker image deployment meta-runner. traefik+local registry
<meta-runner name="localdeploy">
<description>builds docker image and deploys to local machine</description>
<settings>
<parameters>
<param name="env.ASSIGNED_PORT" value="8888" />
</parameters>
<build-runners>
<runner name="build" type="DockerCommand">
<parameters>
<param name="command.args" value="--pull" />
<param name="docker.command.type" value="build" />
<param name="docker.image.namesAndTags" value="localhost:5000/%env.TEAMCITY_PROJECT_NAME%" />
<param name="docker.push.remove.image" value="true" />
<param name="dockerImage.platform" value="linux" />
<param name="dockerfile.path" value="Dockerfile" />
<param name="dockerfile.source" value="PATH" />
<param name="teamcity.step.mode" value="default" />
</parameters>
</runner>
<runner name="push to registry" type="DockerCommand">
<parameters>
<param name="docker.command.type" value="push" />
<param name="docker.image.namesAndTags" value="localhost:5000/%env.TEAMCITY_PROJECT_NAME%" />
<param name="docker.push.remove.image" value="true" />
<param name="dockerfile.source" value="PATH" />
<param name="teamcity.step.mode" value="default" />
</parameters>
</runner>
<runner name="deploy to disk" type="simpleRunner">
<parameters>
<param name="script.content"><![CDATA[docker ps -a --filter "ancestor=%env.TEAMCITY_PROJECT_NAME%" | grep %env.TEAMCITY_PROJECT_NAME% > /dev/null
if [ $? -eq 0 ]; then
echo "Stopping container for %env.TEAMCITY_PROJECT_NAME%"
docker stop %env.TEAMCITY_PROJECT_NAME% 2>&1 1>/dev/null
if [ $? -eq 0 ]; then
echo "Removing previous container for %env.TEAMCITY_PROJECT_NAME%"
docker rm %env.TEAMCITY_PROJECT_NAME% 2>&1 1>/dev/null
else
echo "Problem stopping container, bailing out of deploy process"
exit 1
fi
fi
echo "Pulling latest image for %env.TEAMCITY_PROJECT_NAME%"
docker pull localhost:5000/%env.TEAMCITY_PROJECT_NAME%:latest
if [ $? -eq 0 ]; then
echo "Launching new container for %env.TEAMCITY_PROJECT_NAME%"
docker run -d --restart=unless-stopped --name %env.TEAMCITY_PROJECT_NAME% --network=web --label "traefik.enable=true" --label "traefik.docker.network=web" --label "traefik.frontend.rule=Host: %env.TEAMCITY_PROJECT_NAME%.app.zj.is" --label "traefik.port=%env.ASSIGNED_PORT%" localhost:5000/%env.TEAMCITY_PROJECT_NAME%:latest 2>&1 1>/dev/null
fi]]></param>
<param name="teamcity.step.mode" value="default" />
<param name="use.custom.script" value="true" />
</parameters>
</runner>
</build-runners>
<requirements />
</settings>
</meta-runner>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment