Home | History | Annotate | Download | only in dockerfile
      1 #!/bin/bash
      2 # Copyright 2016 gRPC authors.
      3 #
      4 # Licensed under the Apache License, Version 2.0 (the "License");
      5 # you may not use this file except in compliance with the License.
      6 # You may obtain a copy of the License at
      7 #
      8 #     http://www.apache.org/licenses/LICENSE-2.0
      9 #
     10 # Unless required by applicable law or agreed to in writing, software
     11 # distributed under the License is distributed on an "AS IS" BASIS,
     12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 # See the License for the specific language governing permissions and
     14 # limitations under the License.
     15 #
     16 # Builds selected testing docker images and pushes them to dockerhub.
     17 # Useful for testing environments where it's impractical (or impossible)
     18 # to rely on docker images being cached locally after they've been built
     19 # for the first time (which might be costly especially for some images).
     20 # NOTE: gRPC docker images intended to be used by end users are NOT
     21 # pushed using this script (they're built automatically by dockerhub).
     22 # This script is only for "internal" images we use when testing gRPC.  
     23 
     24 set -ex
     25 
     26 cd $(dirname $0)/../..
     27 git_root=$(pwd)
     28 cd -
     29 
     30 DOCKERHUB_ORGANIZATION=grpctesting
     31 
     32 for DOCKERFILE_DIR in tools/dockerfile/test/* tools/dockerfile/grpc_artifact_* tools/dockerfile/interoptest/* tools/dockerfile/distribtest/* third_party/rake-compiler-dock
     33 do
     34   # Generate image name based on Dockerfile checksum. That works well as long
     35   # as can count on dockerfiles being written in a way that changing the logical 
     36   # contents of the docker image always changes the SHA (e.g. using "ADD file" 
     37   # cmd in the dockerfile in not ok as contents of the added file will not be
     38   # reflected in the SHA).
     39   DOCKER_IMAGE_NAME=$(basename $DOCKERFILE_DIR)_$(sha1sum $DOCKERFILE_DIR/Dockerfile | cut -f1 -d\ )
     40 
     41   # skip the image if it already exists in the repo 
     42   curl --silent -f -lSL https://registry.hub.docker.com/v2/repositories/${DOCKERHUB_ORGANIZATION}/${DOCKER_IMAGE_NAME}/tags/latest > /dev/null \
     43       && continue
     44 
     45   docker build -t ${DOCKERHUB_ORGANIZATION}/${DOCKER_IMAGE_NAME} ${DOCKERFILE_DIR}
     46       
     47   # "docker login" needs to be run in advance
     48   docker push ${DOCKERHUB_ORGANIZATION}/${DOCKER_IMAGE_NAME}
     49 done
     50