build.sh 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. #!/bin/bash
  2. set -ex
  3. WORK_DIR=$(dirname $(readlink -f $0))
  4. HUE_SRC=$(realpath $WORK_DIR/../..)
  5. BUILD_DIR=$(realpath $HUE_SRC/../containerbuild$GBN)
  6. HUE_DIR=$WORK_DIR/hue
  7. APACHE_DIR=$WORK_DIR/huelb
  8. BASEHUE_DIR=$WORK_DIR/base/hue
  9. BASEHUELB_DIR=$WORK_DIR/base/huelb
  10. HUEBASE_VERSION=huebase_ubi:7.5.2
  11. HUELBBASE_VERSION=huelb_httpd_ubi:2.4
  12. COMPILEHUE_DIR=$WORK_DIR/compile/hue
  13. COMPILEHUE_VERSION=huecompile_ubi:7.5.2
  14. HUEUSER="hive"
  15. CONTAINER=$(uuidgen | cut -d"-" -f5)
  16. CONTAINER_HUE_SRC=/root/hue
  17. CONTAINER_HUE_OPT=/opt
  18. if [ -z "$REGISTRY" ]; then
  19. REGISTRY=${REGISTRY:-"docker.io/hortonworks"}
  20. fi
  21. compile_hue() {
  22. mkdir -p $CONTAINER_HUE_OPT
  23. cd $CONTAINER_HUE_SRC
  24. PREFIX=$CONTAINER_HUE_OPT make install
  25. cd $CONTAINER_HUE_OPT/hue
  26. APPS=$(find apps -maxdepth 2 -name "src" -type d|cut -d"/" -f2|sort| sed 's/[^ ]* */apps\/&/g')
  27. ./build/env/bin/python tools/app_reg/app_reg.py --install $APPS --relative-paths
  28. bash tools/relocatable.sh
  29. }
  30. docker_hue_compile() {
  31. export HUE_USER="hive"
  32. export HUE_CONF="/etc/hue"
  33. export HUE_HOME="/opt/${HUEUSER}"
  34. export HUE_CONF_DIR="${HUE_CONF}/conf"
  35. export HUE_LOG_DIR="/var/log/${HUEUSER}"
  36. export UUID_GEN=$(uuidgen | cut -d"-" -f5)
  37. mkdir -p $BUILD_DIR
  38. docker run -dt --name $CONTAINER $COMPILEHUE_VERSION /bin/bash
  39. docker container cp $HUE_SRC $CONTAINER:$CONTAINER_HUE_SRC
  40. docker container exec $CONTAINER $CONTAINER_HUE_SRC/tools/container/build.sh compile_hue
  41. docker container cp $CONTAINER:$CONTAINER_HUE_OPT/hue $BUILD_DIR
  42. docker container stop $CONTAINER
  43. }
  44. find_git_state() {
  45. cd $HUE_SRC
  46. export GBRANCH=$(git ls-remote --get-url)"/commits/"$(git rev-parse --abbrev-ref HEAD)
  47. export GSHA=$(git ls-remote --get-url)"/commit/"$(git rev-list --no-walk HEAD)
  48. export VERSION=$(grep "VERSION=" VERSION | cut -d"=" -f2 | cut -d'"' -f2)
  49. }
  50. subst_var() {
  51. file_name=$1
  52. if [[ -e $file_name ]]; then
  53. if [[ "$file_name" == *"_template" ]]; then
  54. out_name="${file_name::-9}.conf"
  55. fi
  56. fi
  57. eval "cat <<EOF
  58. $(<$file_name)
  59. EOF
  60. " | tee $out_name 2> /dev/null
  61. }
  62. docker_hue_build() {
  63. export HUE_USER="hive"
  64. export HUE_CONF="/etc/hue"
  65. export HUE_HOME="/opt/${HUEUSER}"
  66. export HUE_CONF_DIR="${HUE_CONF}/conf"
  67. export HUE_LOG_DIR="/var/log/${HUEUSER}"
  68. export UUID_GEN=$(uuidgen | cut -d"-" -f5)
  69. cd $HUE_DIR
  70. cp -a $BUILD_DIR/hue $HUE_DIR
  71. rm -f $HUE_DIR/hue/desktop/conf/*
  72. # Reduce Hue container size
  73. rm -rf $HUE_DIR/hue/node_modules
  74. rm -rf $HUE_DIR/hue/desktop/core/ext-eggs
  75. for f in $(find $HUE_DIR/supervisor-files -name "*_template"); do
  76. subst_var $f
  77. done
  78. sed -i -e "s#\${HUEBASE_VERSION}#${HUEBASE_VERSION}#g" $HUE_DIR/Dockerfile
  79. docker build -f $HUE_DIR/Dockerfile -t ${REGISTRY}/hue:$GBN \
  80. --build-arg GBN=$GBN \
  81. --build-arg GSHA="$GSHA" \
  82. --build-arg GBRANCH=$GBRANCH \
  83. --build-arg VERSION=$VERSION \
  84. --build-arg HUEUSER=$HUEUSER \
  85. --build-arg HUE_CONF=$HUE_CONF \
  86. .
  87. }
  88. docker_huelb_build() {
  89. export HUE_USER="hive"
  90. export HUE_CONF="/etc/hue"
  91. export HUE_HOME="/opt/${HUEUSER}"
  92. export HUE_CONF_DIR="${HUE_CONF}/conf"
  93. export HUE_LOG_DIR="/var/log/${HUEUSER}"
  94. cd $APACHE_DIR
  95. cp -a $BUILD_DIR/hue/build/static $APACHE_DIR
  96. for f in $(find $APACHE_DIR -name "*_template"); do
  97. subst_var $f
  98. done
  99. sed -i -e "s#\${HUELBBASE_VERSION}#${HUELBBASE_VERSION}#g" $APACHE_DIR/Dockerfile
  100. docker build -f $APACHE_DIR/Dockerfile -t ${REGISTRY}/huelb:$GBN \
  101. --build-arg GBN=$GBN \
  102. --build-arg GSHA="$GSHA" \
  103. --build-arg GBRANCH=$GBRANCH \
  104. --build-arg VERSION=$VERSION \
  105. --build-arg HUEUSER=$HUEUSER \
  106. --build-arg HUE_CONF=$HUE_CONF \
  107. .
  108. }
  109. build_huebase() {
  110. cd $BASEHUE_DIR
  111. docker build -f $BASEHUE_DIR/Dockerfile -t ${REGISTRY}/$HUEBASE_VERSION .
  112. docker tag ${REGISTRY}/$HUEBASE_VERSION $HUEBASE_VERSION
  113. docker push ${REGISTRY}/$HUEBASE_VERSION
  114. docker pull ${REGISTRY}/$HUEBASE_VERSION
  115. }
  116. build_huelbbase() {
  117. cd $BASEHUELB_DIR
  118. docker build -f $BASEHUELB_DIR/Dockerfile -t ${REGISTRY}/$HUELBBASE_VERSION .
  119. docker tag ${REGISTRY}/$HUELBBASE_VERSION $HUELBBASE_VERSION
  120. docker push ${REGISTRY}/$HUELBBASE_VERSION
  121. docker pull ${REGISTRY}/$HUELBBASE_VERSION
  122. }
  123. build_huecompilebase() {
  124. cd $COMPILEHUE_DIR
  125. docker build -f $COMPILEHUE_DIR/Dockerfile -t ${REGISTRY}/$COMPILEHUE_VERSION .
  126. docker tag ${REGISTRY}/$COMPILEHUE_VERSION $COMPILEHUE_VERSION
  127. docker push ${REGISTRY}/$COMPILEHUE_VERSION
  128. docker pull ${REGISTRY}/$COMPILEHUE_VERSION
  129. }
  130. pull_base_images() {
  131. set +e
  132. docker pull ${REGISTRY}/$HUEBASE_VERSION
  133. if [[ $? != 0 ]]; then
  134. build_huebase
  135. fi
  136. docker tag ${REGISTRY}/$HUEBASE_VERSION $HUEBASE_VERSION
  137. docker pull ${REGISTRY}/$HUELBBASE_VERSION
  138. if [[ $? != 0 ]]; then
  139. build_huelbbase
  140. fi
  141. docker tag ${REGISTRY}/$HUELBBASE_VERSION $HUELBBASE_VERSION
  142. docker pull ${REGISTRY}/$COMPILEHUE_VERSION
  143. if [[ $? != 0 ]]; then
  144. build_huecompilebase
  145. fi
  146. docker tag ${REGISTRY}/$COMPILEHUE_VERSION $COMPILEHUE_VERSION
  147. set -e
  148. }
  149. if [[ $1 == "compile_hue" ]]; then
  150. compile_hue
  151. else
  152. pull_base_images
  153. find_git_state
  154. docker_hue_compile
  155. docker_hue_build
  156. docker_huelb_build
  157. fi