build.sh 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. #!/bin/bash
  2. set -ex
  3. # Time marker for both stderr and stdout
  4. date; date 1>&2
  5. WORK_DIR=$(dirname $(readlink -f $0))
  6. . ${WORK_DIR}/common.sh
  7. HUE_SRC=$(realpath $WORK_DIR/../..)
  8. BUILD_DIR=$(realpath $HUE_SRC/../containerbuild$GBN)
  9. HUE_DIR=$WORK_DIR/hue
  10. APACHE_DIR=$WORK_DIR/huelb
  11. BASEHUE_DIR=$WORK_DIR/base/hue
  12. BASEHUELB_DIR=$WORK_DIR/base/huelb
  13. COMPILEHUE_DIR=$WORK_DIR/compile/hue
  14. COMPILEHUE_VERSION=huecompile_ubi:$DOCKERHUEBASE_VERSION
  15. HUEBASE_VERSION=huebase_ubi:$DOCKERHUEBASE_VERSION
  16. HUELBBASE_VERSION=huelb_httpd_ubi:$DOCKERHUELB_VERSION
  17. CONTAINER_HUE_SRC=/root/${HUEUSER}
  18. CONTAINER_HUE_OPT=/opt
  19. # This step is performed inside the docker(compile step)
  20. compile_py3hue() {
  21. export HUE_HOME="/opt/${HUEUSER}"
  22. export ROOT="/opt/${HUEUSER}"
  23. mkdir -p $CONTAINER_HUE_OPT
  24. cd $CONTAINER_HUE_SRC
  25. INSTALL_DIR=${HUE_HOME} make install
  26. cd $CONTAINER_HUE_OPT/${HUEUSER}
  27. APPS=$(find apps -maxdepth 2 -name "src" -type d|cut -d"/" -f2|sort| sed 's/[^ ]* */apps\/&/g')
  28. ./build/env/bin/python tools/app_reg/app_reg.py --install $APPS --relative-paths
  29. }
  30. # Compile the bits in the docker and copy it out
  31. docker_hue_compile() {
  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 CONTAINER=$(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_py3hue
  41. docker container cp $CONTAINER:$CONTAINER_HUE_OPT/${HUEUSER} $BUILD_DIR
  42. docker container stop $CONTAINER
  43. }
  44. docker_hue_build() {
  45. export HUE_CONF="/etc/hue"
  46. export HUE_HOME="/opt/${HUEUSER}"
  47. export HUE_CONF_DIR="${HUE_CONF}/conf"
  48. export HUE_LOG_DIR="/var/log/${HUEUSER}"
  49. export UUID_GEN=$(uuidgen | cut -d"-" -f5)
  50. cd $HUE_DIR
  51. cp -a $BUILD_DIR/${HUEUSER} $HUE_DIR
  52. rm -f $HUE_DIR/${HUEUSER}/desktop/conf/*
  53. # Include tools/scripts for multi-python wrapper and helpers
  54. mkdir -p $HUE_DIR/${HUEUSER}/tools/scripts
  55. cp -a $HUE_SRC/tools/scripts/* $HUE_DIR/${HUEUSER}/tools/scripts/
  56. chmod +x $HUE_DIR/${HUEUSER}/tools/scripts/*.sh 2>/dev/null || true
  57. chmod +x $HUE_DIR/${HUEUSER}/tools/scripts/python/*.sh 2>/dev/null || true
  58. # Remove chardet package
  59. rm -rf $HUE_DIR/${HUEUSER}/tools/virtual-bootstrap/virtualenv_support
  60. # Reduce Hue container size
  61. rm -rf $HUE_DIR/${HUEUSER}/node_modules
  62. rm -rf $HUE_DIR/${HUEUSER}/desktop/core/ext-eggs
  63. for f in $(find $HUE_DIR/supervisor-files -name "*_template"); do
  64. subst_var $f
  65. done
  66. sed -i -e "s#\${HUEBASE_VERSION}#${HUEBASE_VERSION}#g" $HUE_DIR/Dockerfile
  67. docker build -f $HUE_DIR/Dockerfile -t ${REGISTRY}/hue:$GBN \
  68. --build-arg GBN=$GBN \
  69. --build-arg GSHA="$GSHA" \
  70. --build-arg GBRANCH=$GBRANCH \
  71. --build-arg VERSION=$VERSION \
  72. --build-arg HUEUSER=$HUEUSER \
  73. --build-arg HUE_CONF=$HUE_CONF \
  74. .
  75. }
  76. docker_huelb_build() {
  77. export HUE_CONF="/etc/hue"
  78. export HUE_HOME="/opt/${HUEUSER}"
  79. export HUE_CONF_DIR="${HUE_CONF}/conf"
  80. export HUE_LOG_DIR="/var/log/${HUEUSER}"
  81. cd $APACHE_DIR
  82. cp -a $BUILD_DIR/${HUEUSER}/build/static $APACHE_DIR
  83. for f in $(find $APACHE_DIR -name "*_template"); do
  84. subst_var $f
  85. done
  86. sed -i -e "s#\${HUELBBASE_VERSION}#${HUELBBASE_VERSION}#g" $APACHE_DIR/Dockerfile
  87. docker build -f $APACHE_DIR/Dockerfile -t ${REGISTRY}/huelb:$GBN \
  88. --build-arg GBN=$GBN \
  89. --build-arg GSHA="$GSHA" \
  90. --build-arg GBRANCH=$GBRANCH \
  91. --build-arg VERSION=$VERSION \
  92. --build-arg HUEUSER=$HUEUSER \
  93. --build-arg HUE_CONF=$HUE_CONF \
  94. .
  95. }
  96. build_huebase() {
  97. cd $BASEHUE_DIR
  98. docker build -f $BASEHUE_DIR/Dockerfile -t ${REGISTRY}/$HUEBASE_VERSION .
  99. docker tag ${REGISTRY}/$HUEBASE_VERSION $HUEBASE_VERSION
  100. docker push ${REGISTRY}/$HUEBASE_VERSION
  101. docker pull ${REGISTRY}/$HUEBASE_VERSION
  102. }
  103. build_huelbbase() {
  104. cd $BASEHUELB_DIR
  105. docker build -f $BASEHUELB_DIR/Dockerfile -t ${REGISTRY}/$HUELBBASE_VERSION .
  106. docker tag ${REGISTRY}/$HUELBBASE_VERSION $HUELBBASE_VERSION
  107. docker push ${REGISTRY}/$HUELBBASE_VERSION
  108. docker pull ${REGISTRY}/$HUELBBASE_VERSION
  109. }
  110. build_huecompilebase() {
  111. cd $COMPILEHUE_DIR
  112. docker build -f $COMPILEHUE_DIR/Dockerfile -t ${REGISTRY}/$COMPILEHUE_VERSION .
  113. docker tag ${REGISTRY}/$COMPILEHUE_VERSION $COMPILEHUE_VERSION
  114. docker push ${REGISTRY}/$COMPILEHUE_VERSION
  115. docker pull ${REGISTRY}/$COMPILEHUE_VERSION
  116. }
  117. pull_base_images() {
  118. docker pull ${REGISTRY}/$HUEBASE_VERSION
  119. if [[ $? -ne 0 ]]; then
  120. build_huebase
  121. fi
  122. docker tag ${REGISTRY}/$HUEBASE_VERSION $HUEBASE_VERSION
  123. docker pull ${REGISTRY}/$HUELBBASE_VERSION
  124. if [[ $? -ne 0 ]]; then
  125. build_huelbbase
  126. fi
  127. docker tag ${REGISTRY}/$HUELBBASE_VERSION $HUELBBASE_VERSION
  128. docker pull ${REGISTRY}/$COMPILEHUE_VERSION
  129. if [[ $? -ne 0 ]]; then
  130. build_huecompilebase
  131. fi
  132. docker tag ${REGISTRY}/$COMPILEHUE_VERSION $COMPILEHUE_VERSION
  133. }
  134. rebuild_base_images() {
  135. docker pull registry.access.redhat.com/ubi8/ubi:latest
  136. build_huebase
  137. build_huelbbase
  138. build_huecompilebase
  139. }
  140. hue_containers_build() {
  141. if [ $REBUILD_BASE -gt 0 ]; then
  142. rebuild_base_images
  143. fi
  144. pull_base_images
  145. find_git_state
  146. # compile hue code in compile container
  147. docker_hue_compile
  148. # package compiled hue code in runtime container
  149. docker_hue_build
  150. docker_huelb_build
  151. }
  152. wait_for_parallel_jobs() {
  153. EXIT=0
  154. jobs -l
  155. for job in `jobs -p`; do
  156. echo $job
  157. wait $job || let "EXIT+=1"
  158. done
  159. if [[ "$EXIT" == "0" ]]; then
  160. exit 0
  161. else
  162. exit 1
  163. fi
  164. }
  165. if [[ $1 == "compile_py3hue" ]]; then
  166. compile_py3hue
  167. else
  168. # Perform Hue Code Compilation and Docker packaging
  169. hue_containers_build
  170. # Perform any other container build process
  171. extra_container_build=$(find_extra_container_to_build)
  172. if test -n "$extra_container_build"; then
  173. $extra_container_build
  174. fi
  175. # Wait for the parallel jobs to finish
  176. wait_for_parallel_jobs
  177. fi