Skip to content

Instantly share code, notes, and snippets.

@ervinb
Last active September 7, 2018 13:35
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ervinb/bae1417d6a86fb6dda869092b5fc87cc to your computer and use it in GitHub Desktop.
Save ervinb/bae1417d6a86fb6dda869092b5fc87cc to your computer and use it in GitHub Desktop.
#!/bin/bash
set -e
registry_version="2"
local_registry_port="5000"
local_registry_name="localhost"
local_registry_url="${local_registry_name}:${local_registry_port}"
docker_image_name="$SEMAPHORE_REPO_SLUG"
base_image_name="${local_registry_url}/${docker_image_name}"
semaphore_build_tag="${REVISION}_${SEMAPHORE_BUILD_NUMBER}"
semaphore_build_image="${base_image_name}:${semaphore_build_tag}"
function setup-local-registry(){
if ! (docker ps | grep "registry:$registry_version" &> /dev/null); then
echo ">> Setting up local Docker registry on port ${local_registry_port}"
echo "{\"insecure-registries\" : [\"$local_registry_url\"]}" | sudo tee /etc/docker/daemon.json
registry_cid=$(docker run -d -p $local_registry_port:$local_registry_port -v $SEMAPHORE_CACHE_DIR/registry:/var/lib/registry --restart=always --name registry-$(date +%s) registry:$registry_version)
echo ">> Waiting for the local registry to be accessible"
while true; do
curl http://${local_registry_url}/v2/_catalog 2>/dev/null && break
sleep 2
done
fi
}
function semaphore-docker-build(){
setup-local-registry
docker pull $base_image_name || true
echo $SEMAPHORE_CACHE_DIR >> .dockerignore
if (docker pull $base_image_name &> /dev/null); then
echo ">> Base image $base_image_name pulled from local registry."
fi
echo ">> Building image"
docker build --cache-from $base_image_name -t ${semaphore_build_image} $@
echo ">> Tagging image"
docker tag $semaphore_build_image ${base_image_name}:latest
echo ">> Uploading to local Docker registry"
docker push $semaphore_build_image
docker push $base_image_name
echo ">> Stopping local Docker registry"
docker stop $registry_cid
echo ">> Done"
}
semaphore-docker-build "$@"
@ervinb
Copy link
Author

ervinb commented Sep 7, 2018

Starts a local registry and stores built images inside it.

Install the script

wget https://gist.githubusercontent.com/ervinb/bae1417d6a86fb6dda869092b5fc87cc/raw/semaphore-docker-build.sh
sudo ln -fs "$(pwd)/semaphore-docker-build.sh" /usr/bin/semaphore-docker-build
chmod +x /usr/bin/semaphore-docker-build

Usage

semaphore-docker-build -t my:image .

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment