github.com/bshelton229/agent@v3.5.4+incompatible/.buildkite/steps/build-docker-image.sh (about) 1 #!/bin/bash 2 set -euo pipefail 3 4 ## This script can be run locally like this: 5 ## 6 ## .buildkite/steps/build-docker-image.sh (alpine|ubuntu) (image tag) (codename) (version) 7 ## e.g: .buildkite/steps/build-docker-image.sh alpine buildkiteci/agent:lox-manual-build stable 3.1.1 8 ## 9 ## You can then publish that image with 10 ## 11 ## .buildkite/steps/publish-docker-image.sh alpine buildkiteci/agent:lox-manual-build stable 3.1.1 12 13 dry_run() { 14 if [[ "${DRY_RUN:-}" == "false" ]] ; then 15 "$@" 16 else 17 echo "[dry-run] $*" 18 fi 19 } 20 21 build_docker_image() { 22 local image_tag="$1" 23 local packaging_dir="$2" 24 25 echo "--- Building :docker: $image_tag" 26 cp -a packaging/linux/root/usr/share/buildkite-agent/hooks/ "${packaging_dir}/hooks/" 27 cp pkg/buildkite-agent-linux-amd64 "${packaging_dir}/buildkite-agent" 28 chmod +x "${packaging_dir}/buildkite-agent" 29 docker build --tag "$image_tag" "${packaging_dir}" 30 } 31 32 test_docker_image() { 33 local image_tag="$1" 34 35 echo "--- :hammer: Testing $image_tag can run" 36 docker run --rm "$image_tag" --version 37 38 echo "--- :hammer: Testing $image_tag can access docker socket" 39 docker run --rm -v /var/run/docker.sock:/var/run/docker.sock --entrypoint "docker" "$image_tag" version 40 41 echo "--- :hammer: Testing $image_tag has docker-compose" 42 docker run --rm --entrypoint "docker-compose" "$image_tag" --version 43 } 44 45 push_docker_image() { 46 local image_tag="$1" 47 echo "--- Pushing :docker: image to $image_tag" 48 dry_run docker push "$image_tag" 49 } 50 51 variant="${1:-}" 52 image_tag="${2:-}" 53 codename="${3:-}" 54 version="${4:-}" 55 push="${PUSH_IMAGE:-true}" 56 57 if [[ ! "$variant" =~ ^(alpine|ubuntu)$ ]] ; then 58 echo "Unknown docker variant $variant" 59 exit 1 60 fi 61 62 # Disable pushing if run manually 63 if [[ -n "$image_tag" ]] ; then 64 push="false" 65 fi 66 67 rm -rf pkg 68 mkdir -p pkg 69 70 if [[ -z "$version" ]] ; then 71 echo '--- Downloading :linux: binaries from artifacts' 72 buildkite-agent artifact download "pkg/buildkite-agent-linux-amd64" . 73 else 74 echo "--- Downloading :linux: binaries for version $version" 75 curl -Lf -o pkg/buildkite-agent-linux-amd64 \ 76 https://download.buildkite.com/agent/${codename}/${version}/buildkite-agent-linux-amd64 77 fi 78 79 if [[ -z "$image_tag" ]] ; then 80 echo "--- Getting docker image tag for $variant from build meta data" 81 image_tag=$(buildkite-agent meta-data get "agent-docker-image-$variant") 82 echo "Docker Image Tag for $variant: $image_tag" 83 fi 84 85 case $variant in 86 alpine) 87 build_docker_image "$image_tag" "packaging/docker/alpine-linux" 88 ;; 89 ubuntu) 90 build_docker_image "$image_tag" "packaging/docker/ubuntu-linux" 91 ;; 92 *) 93 echo "Unknown variant $variant" 94 exit 1 95 ;; 96 esac 97 98 test_docker_image "$image_tag" 99 100 if [[ $push == "true" ]] ; then 101 push_docker_image "$image_tag" 102 fi