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