apollo_docker.sh 4.5 KB
Newer Older
D
Dong Li 已提交
1 2 3 4 5 6
#!/usr/bin/env bash


DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd "${DIR}"

L
Lei Wang 已提交
7 8
# the machine type, currently support x86_64, aarch64
MACHINE_ARCH=$(uname -m)
D
Dong Li 已提交
9 10 11 12
source ${DIR}/scripts/apollo_base.sh

TIME=$(date  +%Y%m%d_%H%M)
if [ -z "${DOCKER_REPO}" ]; then
L
Lei Wang 已提交
13
    DOCKER_REPO=apolloauto/apollo
D
Dong Li 已提交
14 15 16
fi

function print_usage() {
L
Lei Wang 已提交
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
  RED='\033[0;31m'
  BLUE='\033[0;34m'
  BOLD='\033[1m'
  NONE='\033[0m'

  echo -e "\n${RED}Usage${NONE}:
  .${BOLD}/apollo_docker.sh${NONE} [OPTION]"

  echo -e "\n${RED}Options${NONE}:
  ${BLUE}build${NONE}: run build only
  ${BLUE}build_opt${NONE}: build optimized binary for the code
  ${BLUE}build_gpu${NONE}: run build only with Caffe GPU mode support
  ${BLUE}build_opt_gpu${NONE}: build optimized binary with Caffe GPU mode support
  ${BLUE}build_fe${NONE}: compile frontend javascript code, this requires all the node_modules to be installed already
  ${BLUE}buildify${NONE}: fix style of BUILD files
  ${BLUE}check${NONE}: run build/lint/test, please make sure it passes before checking in new code
  ${BLUE}clean${NONE}: run Bazel clean
  ${BLUE}config${NONE}: run configurator tool
  ${BLUE}coverage${NONE}: generate test coverage report
  ${BLUE}doc${NONE}: generate doxygen document
  ${BLUE}lint${NONE}: run code style check
  ${BLUE}usage${NONE}: print this menu
  ${BLUE}release${NONE}: build release version
  ${BLUE}test${NONE}: run all unit tests
  ${BLUE}version${NONE}: display current commit and date
  ${BLUE}push${NONE}: pushes the images to Docker hub
43 44
  ${BLUE}gen${NONE}: generate a docker release image
  ${BLUE}ota_gen${NONE}: generate a ota docker release image
L
Lei Wang 已提交
45
  "
D
Dong Li 已提交
46 47 48 49
}

function start_build_docker() {
  docker ps --format "{{.Names}}" | grep apollo_dev 1>/dev/null 2>&1
50 51
  if [ $? != 0 ]; then    
    # If Google is reachable, we fetch the docker image directly. 
52
    if ping -q -c 1 -W 1 www.google.com 1>/dev/null 2>&1; then
53 54
      opt=""
    # If Google is unreachable but Baidu reachable, we fetch the docker image from China. 
55
    elif ping -q -c 1 -W 1 www.baidu.com 1>/dev/null 2>&1; then
56 57 58 59 60 61 62
      opt="-C"
    # If Baidu is unreachable, we use local images. 
    else
      opt="-l"
    fi
    #echo ${opt}
    bash docker/scripts/dev_start.sh ${opt}
D
Dong Li 已提交
63 64 65 66
  fi
}

function gen_docker() {
67
  IMG="apolloauto/apollo:run-${MACHINE_ARCH}-20180906_2002"
68 69 70 71 72 73 74 75
  RELEASE_DIR=${HOME}/.cache/apollo_release
  APOLLO_DIR="${RELEASE_DIR}/apollo"

  if [ ! -d "${APOLLO_DIR}" ]; then
    echo "Release directory does not exist!"
    exit 1
  fi

L
Lei Wang 已提交
76 77
  RELEASE_NAME="${DOCKER_REPO}:release-${MACHINE_ARCH}-${TIME}"
  DEFAULT_NAME="${DOCKER_REPO}:release-${MACHINE_ARCH}-latest"
D
Dong Li 已提交
78
  docker pull $IMG
79 80
  echo "time : ${TIME}" >> ${APOLLO_DIR}/meta.ini
  echo "tag: ${RELEASE_NAME}" >> ${APOLLO_DIR}/meta.ini
D
Dong Li 已提交
81

L
Lei Wang 已提交
82 83 84 85 86
  docker ps -a --format "{{.Names}}" | grep 'apollo_release' 1>/dev/null
  if [ $? == 0 ];then
    docker stop apollo_release 1>/dev/null
    docker rm -f apollo_release 1>/dev/null
  fi
D
Dong Li 已提交
87 88 89 90
  docker run -it \
      -d \
      --name apollo_release \
      --net host \
91
      -v $HOME/.cache:/root/mnt \
D
Dong Li 已提交
92 93 94
      -w /apollo \
      "$IMG"

95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
  if [ "$OTA_RELEASE" != "1" ]; then
    docker exec apollo_release bash -c 'cp -Lr /root/mnt/apollo_release/apollo /'
  else
    RELEASE_TGZ="apollo_release.tar.gz"
    SEC_RELEASE_TGZ="sec_apollo_release.tar.gz"

    if [ -e "$HOME/.cache/$RELEASE_TGZ" ]; then
      rm $HOME/.cache/$RELEASE_TGZ
    fi

    if [ -e "$HOME/.cache/$SEC_RELEASE_TGZ" ]; then
      rm $HOME/.cache/$SEC_RELEASE_TGZ
    fi

    # generate security release package
    tar czf $HOME/.cache/$RELEASE_TGZ -C $HOME/.cache apollo_release
    python modules/tools/ota/create_sec_package.py
    docker exec apollo_release cp /root/mnt/${SEC_RELEASE_TGZ} /root
  fi

D
Dong Li 已提交
115 116
  CONTAINER_ID=$(docker ps | grep apollo_release | awk '{print $1}')
  docker commit "$CONTAINER_ID" "$DEFAULT_NAME"
117
  docker tag "$DEFAULT_NAME" "$RELEASE_NAME"
D
Dong Li 已提交
118 119 120 121
  docker stop "$CONTAINER_ID"
}

function push() {
122 123 124
  DEFAULT_NAME="${DOCKER_REPO}:release-${MACHINE_ARCH}-latest"
  LATEST_IMAG_ID=$(docker images --format "{{.Repository}}:{{.Tag}} {{.ID}}" | grep "${DEFAULT_NAME}" | cut -d " " -f 2)
  RELEASE_NAME=$(docker images --format "{{.Repository}}:{{.Tag}} {{.ID}}" | grep ${LATEST_IMAG_ID}| grep -v "${DEFAULT_NAME}" | cut -d " " -f 1)
D
Dong Li 已提交
125 126 127 128
  docker push "$DEFAULT_NAME"
  docker push "$RELEASE_NAME"
}

L
Lei Wang 已提交
129
if [ $# == 0 ];then
D
Dong Li 已提交
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
    print_usage
    exit 1
fi

start_build_docker

case $1 in
  print_usage)
    print_usage
    ;;
  push)
    push
    ;;
  gen)
    gen_docker
    ;;
146 147 148 149
  ota_gen)
    OTA_RELEASE=1
    gen_docker
    ;;
D
Dong Li 已提交
150
  *)
L
Lei Wang 已提交
151
    docker exec -u $USER apollo_dev bash -c "./apollo.sh $@"
D
Dong Li 已提交
152 153
    ;;
esac