Skip to content

Commit 696c97c

Browse files
Forinilemfrias
authored andcommitted
Refactored the old base and instance images into a new instance image based on minimal-runtime image
1 parent be0fe13 commit 696c97c

File tree

7 files changed

+136
-131
lines changed

7 files changed

+136
-131
lines changed

Dockerfile

Lines changed: 15 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# syntax=docker/dockerfile:1.6
12
# Base docker file having defined environment for build and run of hived instance.
23
# Modify CI_IMAGE_TAG here and inside script hive/scripts/ci-helpers/build_ci_base_image.sh and run it. Then push images to registry
34
# To be started from cloned haf source directory.
@@ -86,22 +87,24 @@ SHELL ["/bin/bash", "-c"]
8687
# Get everything from cwd as sources to be built.
8788
COPY --chown=hived_admin:users . /home/hived_admin/source
8889

89-
RUN \
90-
mkdir -p ./build/tests/unit/ \
91-
&& ./source/${HIVE_SUBDIR}/scripts/build.sh --source-dir="./source/${HIVE_SUBDIR}" --binary-dir="./build" \
90+
RUN <<-EOF
91+
set -e
92+
93+
INSTALLATION_DIR="/home/hived/bin"
94+
sudo --user=hived mkdir -p "${INSTALLATION_DIR}"
95+
96+
./source/${HIVE_SUBDIR}/scripts/build.sh --source-dir="./source/${HIVE_SUBDIR}" --binary-dir="./build" \
9297
--cmake-arg="-DBUILD_HIVE_TESTNET=${BUILD_HIVE_TESTNET}" \
9398
--cmake-arg="-DENABLE_SMT_SUPPORT=${ENABLE_SMT_SUPPORT}" \
9499
--cmake-arg="-DHIVE_CONVERTER_BUILD=${HIVE_CONVERTER_BUILD}" \
95100
--cmake-arg="-DHIVE_LINT=${HIVE_LINT}" \
96-
&& \
97-
cd ./build && \
98-
find . -name *.o -type f -delete && \
99-
find . -name *.a -type f -delete
101+
--flat-binary-directory="${INSTALLATION_DIR}" \
102+
--clean-after-build
100103

101-
# This prevents crash if testnet is not build
102-
RUN mkdir -p /home/hived_admin/build/libraries/vendor/rocksdb/tools
104+
sudo chown -R hived "${INSTALLATION_DIR}/"*
105+
EOF
103106

104-
FROM ${CI_REGISTRY_IMAGE}runtime:$CI_IMAGE_TAG AS base
107+
FROM ${CI_REGISTRY_IMAGE}minimal-runtime:$CI_IMAGE_TAG AS instance
105108

106109
ARG BUILD_TIME
107110
ARG GIT_COMMIT_SHA
@@ -152,13 +155,7 @@ RUN mkdir -p /home/hived/bin && \
152155
chown -Rc hived:users /home/hived/
153156

154157
COPY --from=build --chown=hived:users \
155-
/home/hived_admin/build/programs/hived/hived \
156-
/home/hived_admin/build/programs/cli_wallet/cli_wallet \
157-
/home/hived_admin/build/programs/beekeeper/beekeeper \
158-
/home/hived_admin/build/programs/util/* \
159-
/home/hived_admin/build/programs/blockchain_converter/blockchain_converter* \
160-
/home/hived_admin/build/tests/unit/* \
161-
/home/hived_admin/build/libraries/vendor/rocksdb/tools/sst_dum* /home/hived/bin/
158+
/home/hived/bin/* /home/hived/bin/
162159

163160
COPY --from=build --chown=hived:users /home/hived_admin/source/${HIVE_SUBDIR}/doc/example_config.ini /home/hived/datadir/example_config.ini
164161

@@ -179,13 +176,6 @@ ENV SHM_DIR=${DATADIR}/blockchain
179176

180177
STOPSIGNAL SIGINT
181178

182-
# JSON rpc service
183-
EXPOSE ${HTTP_PORT}
184-
185-
ENTRYPOINT [ "/home/hived_admin/docker_entrypoint.sh" ]
186-
187-
FROM ${CI_REGISTRY_IMAGE}${IMAGE_TAG_PREFIX}base:${BUILD_IMAGE_TAG} AS instance
188-
189179
#p2p service
190180
EXPOSE ${P2P_PORT}
191181
# websocket service
@@ -195,9 +185,4 @@ EXPOSE ${HTTP_PORT}
195185
# Port specific to HTTP cli_wallet server
196186
EXPOSE ${CLI_WALLET_PORT}
197187

198-
# We don't have a separate 'minimal-instance' version of hive. We could create one, based
199-
# off `minimal-runtime` instead of `runtime` and probably save a hundred MB or so, but
200-
# the current `instance` isn't bad. Our current focus is shrinking the haf image size,
201-
# and since we use the same scripts for building both hive and haf, we need a
202-
# 'minimal-instance' target here to match the one in haf. Don't use this.
203-
FROM instance AS minimal
188+
ENTRYPOINT [ "/home/hived_admin/docker_entrypoint.sh" ]

scripts/build.sh

Lines changed: 91 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,41 @@ set -euo pipefail
44

55
SCRIPTPATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
66

7-
LOG_FILE=build.log
8-
7+
export LOG_FILE=build.log
8+
# shellcheck source=./common.sh
99
source "$SCRIPTPATH/common.sh"
1010

1111
log_exec_params "$@"
1212

1313
#This cript builds all (or selected) targets in the hive repo
1414

1515
print_help () {
16-
echo "Usage: $0 [OPTION[=VALUE]]... [target]..."
17-
echo
18-
echo "Allows to build Hive sources "
19-
echo " --source-dir=DIRECTORY_PATH"
20-
echo " Specify a directory containing a Hived source tree."
21-
echo " --binary-dir=DIRECTORY_PATH"
22-
echo " Specify a directory to store a build output (hived binaries)."
23-
echo " Usually it is a \`build\` subdirectory in the hive source tree."
24-
echo " --cmake-arg=ARG Specify additional arguments to the CMake tool spawn."
25-
echo " --help Display this help screen and exit."
26-
echo
16+
cat <<EOF
17+
Usage: $0 [OPTION[=VALUE]]... [target]...
18+
19+
Allows to build Hive sources
20+
--source-dir=DIRECTORY_PATH
21+
Specify a directory containing a Hived source tree.
22+
--binary-dir=DIRECTORY_PATH
23+
Specify a directory to store a build output (hived binaries).
24+
Usually it is a \`build\` subdirectory in the hive source tree.
25+
--flat-binary-directory=DIRECTORY_PATH
26+
Directory where all binaries are moved after build while flattening
27+
the directory structure, that is installation directory (optional, not set by default, must exist)
28+
--cmake-arg=ARG Specify additional arguments to the CMake tool spawn.
29+
--clean-after-build Remove compiled files after build
30+
--haf-build Set if build is called from HAF
31+
--help Display this help screen and exit.
32+
33+
EOF
2734
}
2835

2936
HIVED_BINARY_DIR="../build"
3037
HIVED_SOURCE_DIR="."
38+
HIVED_INSTALLATION_DIR=""
39+
CLEAN_AFTER_BUILD="false"
40+
HAF_BUILD=""
41+
3142
CMAKE_ARGS=()
3243

3344
JOBS=$(nproc)
@@ -50,6 +61,15 @@ while [ $# -gt 0 ]; do
5061
--source-dir=*)
5162
HIVED_SOURCE_DIR="${1#*=}"
5263
;;
64+
--flat-binary-directory=*)
65+
HIVED_INSTALLATION_DIR="${1#*=}"
66+
;;
67+
--clean-after-build)
68+
CLEAN_AFTER_BUILD="true"
69+
;;
70+
--haf-build)
71+
HAF_BUILD="true"
72+
;;
5373
--help)
5474
print_help
5575
exit 0
@@ -67,16 +87,69 @@ while [ $# -gt 0 ]; do
6787
shift
6888
done
6989

70-
abs_src_dir=`realpath -e --relative-base="$SCRIPTPATH" "$HIVED_SOURCE_DIR"`
71-
abs_build_dir=`realpath -m --relative-base="$SCRIPTPATH" "$HIVED_BINARY_DIR"`
90+
abs_src_dir=$(realpath -e --relative-base="$SCRIPTPATH" "$HIVED_SOURCE_DIR")
91+
abs_build_dir=$(realpath -m --relative-base="$SCRIPTPATH" "$HIVED_BINARY_DIR")
7292

73-
pwd
93+
# pwd
7494
mkdir -vp "$abs_build_dir"
7595
pushd "$abs_build_dir"
76-
pwd
77-
cmake -DCMAKE_BUILD_TYPE=Release -GNinja "${CMAKE_ARGS[@]}" "$abs_src_dir"
96+
# pwd
97+
98+
echo "Building Hive!"
7899

100+
cmake -DCMAKE_BUILD_TYPE=Release -GNinja "${CMAKE_ARGS[@]}" "$abs_src_dir"
79101
ninja "$@"
80102

103+
if [[ "$CLEAN_AFTER_BUILD" == "true" ]]; then
104+
echo "Cleaning up after build..."
105+
# Patterns for find must be quoted so they're not expanded by Bash
106+
find . -name "*.o" -type f -delete
107+
find . -name "*.a" -type f -delete
108+
fi
109+
110+
echo "Done!"
111+
81112
popd
82113

114+
if [[ -d "$HIVED_INSTALLATION_DIR" ]]; then
115+
116+
# Move all the binaries to the $HIVED_INSTALLATION_DIR directory
117+
sudo mv "$abs_build_dir/${HAF_BUILD:+"hive/"}programs/hived/hived" \
118+
"$abs_build_dir/${HAF_BUILD:+"hive/"}programs/cli_wallet/cli_wallet" \
119+
"$abs_build_dir/${HAF_BUILD:+"hive/"}programs/util/"* \
120+
"$HIVED_INSTALLATION_DIR/"
121+
122+
sudo rm -rf "$HIVED_INSTALLATION_DIR/CMakeFiles"
123+
124+
if [[ -f "$abs_build_dir/${HAF_BUILD:+"hive/"}programs/beekeeper/beekeeper/beekeeper" ]]; then
125+
sudo mv "$abs_build_dir/${HAF_BUILD:+"hive/"}programs/beekeeper/beekeeper/beekeeper" \
126+
"$HIVED_INSTALLATION_DIR/"
127+
fi
128+
129+
if [[ -n "$(shopt -s nullglob; echo "$abs_build_dir/${HAF_BUILD:+"hive/"}programs/blockchain_converter/blockchain_converter"*)" ]]; then
130+
sudo mv "$abs_build_dir/${HAF_BUILD:+"hive/"}programs/blockchain_converter/blockchain_converter"* \
131+
"$HIVED_INSTALLATION_DIR/"
132+
fi
133+
134+
if [[ -n "$(shopt -s nullglob; echo "$abs_build_dir/${HAF_BUILD:+"hive/"}bin/"*)" ]]; then
135+
sudo mv "$abs_build_dir/${HAF_BUILD:+"hive/"}bin/"* \
136+
"$HIVED_INSTALLATION_DIR/"
137+
fi
138+
139+
if [[ -n "$(shopt -s nullglob; echo "$abs_build_dir/bin/"*)" ]]; then
140+
sudo mv "$abs_build_dir/bin/"* \
141+
"$HIVED_INSTALLATION_DIR/"
142+
fi
143+
144+
if [[ -n "$(shopt -s nullglob; echo "$abs_build_dir/tests/unit/"*)" ]]; then
145+
sudo mv "$abs_build_dir/tests/unit/"* "$HIVED_INSTALLATION_DIR/"
146+
fi
147+
148+
sudo rm -rf "$HIVED_INSTALLATION_DIR/CMakeFiles" "$HIVED_INSTALLATION_DIR/cmake_install.cmake"
149+
150+
if [[ -n "$(shopt -s nullglob; echo "$abs_build_dir/${HAF_BUILD:+"hive/"}libraries/vendor/rocksdb/tools/sst_dum"*)" ]]; then
151+
sudo mv "$abs_build_dir/${HAF_BUILD:+"hive/"}libraries/vendor/rocksdb/tools/sst_dum"* \
152+
"$HIVED_INSTALLATION_DIR/"
153+
fi
154+
155+
fi

scripts/ci-helpers/build_and_publish_instance.sh

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -115,21 +115,21 @@ echo "Building an instance image in the source directory $SRC_DIR"
115115
"$SRC_DIR/scripts/ci-helpers/build_instance.sh" "$CI_COMMIT_TAG" "$SRC_DIR" "$CI_REGISTRY_IMAGE" "${BUILD_INSTANCE_ADDITIONAL_ARGS[@]}"
116116

117117
echo "Tagging the image built in the previous step as ${CI_REGISTRY_IMAGE}"
118-
docker tag "$CI_REGISTRY_IMAGE/minimal:$CI_COMMIT_TAG" "$CI_REGISTRY_IMAGE:$CI_COMMIT_TAG"
118+
docker tag "${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}" "${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}"
119119

120-
HIVEIO_IMG="hiveio/${CI_PROJECT_NAME}:$CI_COMMIT_TAG"
120+
HIVEIO_IMG="hiveio/${CI_PROJECT_NAME}:${CI_COMMIT_TAG}"
121121

122122
echo "Tagging the image built in the previous step as ${HIVEIO_IMG}"
123-
docker tag "$CI_REGISTRY_IMAGE/minimal:$CI_COMMIT_TAG" "${HIVEIO_IMG}"
123+
docker tag "${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}" "${HIVEIO_IMG}"
124124

125-
HIVEBLOG_IMG="registry-upload.hive.blog/${CI_PROJECT_NAME}:$CI_COMMIT_TAG"
125+
HIVEBLOG_IMG="registry-upload.hive.blog/${CI_PROJECT_NAME}:${CI_COMMIT_TAG}"
126126

127127
echo "Tagging the image built in the previous step as ${HIVEBLOG_IMG}"
128-
docker tag "$CI_REGISTRY_IMAGE/minimal:$CI_COMMIT_TAG" "${HIVEBLOG_IMG}"
128+
docker tag "$CI_REGISTRY_IMAGE:$CI_COMMIT_TAG" "${HIVEBLOG_IMG}"
129129

130130
docker images
131131

132132
echo "Pushing instance images"
133-
docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_TAG"
133+
docker push "${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG}"
134134
docker push "${HIVEIO_IMG}"
135135
docker push "${HIVEBLOG_IMG}"

scripts/ci-helpers/build_instance.sh

Lines changed: 9 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,6 @@ if [ -z "$GIT_CURRENT_BRANCH" ]; then
115115
fi
116116
fi
117117

118-
119118
GIT_LAST_LOG_MESSAGE="$(git log -1 --pretty=%B || true)"
120119
if [ -z "$GIT_LAST_LOG_MESSAGE" ]; then
121120
GIT_LAST_LOG_MESSAGE="[unknown]"
@@ -131,49 +130,25 @@ if [ -z "$GIT_LAST_COMMIT_DATE" ]; then
131130
GIT_LAST_COMMIT_DATE="[unknown]"
132131
fi
133132

134-
echo -e "\nBuilding base instance image...\n"
135-
136-
docker build --target=base \
137-
--build-arg CI_REGISTRY_IMAGE="$REGISTRY/" \
138-
--build-arg BUILD_HIVE_TESTNET="$BUILD_HIVE_TESTNET" \
139-
--build-arg HIVE_CONVERTER_BUILD="$HIVE_CONVERTER_BUILD" \
140-
--build-arg BUILD_IMAGE_TAG="$BUILD_IMAGE_TAG" \
141-
--build-arg BUILD_TIME="$BUILD_TIME" \
142-
--build-arg GIT_COMMIT_SHA="$GIT_COMMIT_SHA" \
143-
--build-arg GIT_CURRENT_BRANCH="$GIT_CURRENT_BRANCH" \
144-
--build-arg GIT_LAST_LOG_MESSAGE="$GIT_LAST_LOG_MESSAGE" \
145-
--build-arg GIT_LAST_COMMITTER="$GIT_LAST_COMMITTER" \
146-
--build-arg GIT_LAST_COMMIT_DATE="$GIT_LAST_COMMIT_DATE" \
147-
--build-arg HIVE_SUBDIR="$HIVE_SUBDIR" \
148-
--build-arg IMAGE_TAG_PREFIX="${IMAGE_TAG_PREFIX:+$IMAGE_TAG_PREFIX-}" \
149-
--tag "${REGISTRY}/${IMAGE_TAG_PREFIX:+$IMAGE_TAG_PREFIX-}base:${BUILD_IMAGE_TAG}" \
150-
--file Dockerfile "$SOURCE_DIR"
151-
152-
echo -e "\nDone!\nBuilding instance image...\n"
133+
echo -e "Building Docker build image...\n"
153134

154-
docker build --target=instance \
135+
docker build --target=build \
155136
--build-arg CI_REGISTRY_IMAGE="$REGISTRY/" \
156137
--build-arg BUILD_HIVE_TESTNET=$BUILD_HIVE_TESTNET \
157138
--build-arg HIVE_CONVERTER_BUILD=$HIVE_CONVERTER_BUILD \
158139
--build-arg BUILD_IMAGE_TAG="$BUILD_IMAGE_TAG" \
159-
--build-arg BUILD_TIME="$BUILD_TIME" \
160-
--build-arg GIT_COMMIT_SHA="$GIT_COMMIT_SHA" \
161-
--build-arg GIT_CURRENT_BRANCH="$GIT_CURRENT_BRANCH" \
162-
--build-arg GIT_LAST_LOG_MESSAGE="$GIT_LAST_LOG_MESSAGE" \
163-
--build-arg GIT_LAST_COMMITTER="$GIT_LAST_COMMITTER" \
164-
--build-arg GIT_LAST_COMMIT_DATE="$GIT_LAST_COMMIT_DATE" \
165140
--build-arg HIVE_SUBDIR="$HIVE_SUBDIR" \
166141
--build-arg IMAGE_TAG_PREFIX="${IMAGE_TAG_PREFIX:+$IMAGE_TAG_PREFIX-}" \
167-
--tag "${REGISTRY}${IMAGE_TAG_PREFIX:+/$IMAGE_TAG_PREFIX}:${BUILD_IMAGE_TAG}" \
142+
--tag "${REGISTRY}${IMAGE_TAG_PREFIX:+/$IMAGE_TAG_PREFIX}/build:${BUILD_IMAGE_TAG}" \
168143
--file Dockerfile "$SOURCE_DIR"
169144

170-
echo -e "\nDone!\nBuilding minimal instance image...\n"
145+
echo -e "\nDone!\nBuilding Docker instance image...\n"
171146

172-
docker build --target=minimal \
147+
docker build --target=instance \
173148
--build-arg CI_REGISTRY_IMAGE="$REGISTRY/" \
149+
--build-arg BUILD_IMAGE_TAG="$BUILD_IMAGE_TAG" \
174150
--build-arg BUILD_HIVE_TESTNET=$BUILD_HIVE_TESTNET \
175151
--build-arg HIVE_CONVERTER_BUILD=$HIVE_CONVERTER_BUILD \
176-
--build-arg BUILD_IMAGE_TAG="$BUILD_IMAGE_TAG" \
177152
--build-arg BUILD_TIME="$BUILD_TIME" \
178153
--build-arg GIT_COMMIT_SHA="$GIT_COMMIT_SHA" \
179154
--build-arg GIT_CURRENT_BRANCH="$GIT_CURRENT_BRANCH" \
@@ -182,7 +157,8 @@ docker build --target=minimal \
182157
--build-arg GIT_LAST_COMMIT_DATE="$GIT_LAST_COMMIT_DATE" \
183158
--build-arg HIVE_SUBDIR="$HIVE_SUBDIR" \
184159
--build-arg IMAGE_TAG_PREFIX="${IMAGE_TAG_PREFIX:+$IMAGE_TAG_PREFIX-}" \
185-
--tag "${REGISTRY}/${IMAGE_TAG_PREFIX:+$IMAGE_TAG_PREFIX-}minimal:${BUILD_IMAGE_TAG}" \
160+
--build-context "build=docker-image://${REGISTRY}${IMAGE_TAG_PREFIX:+/$IMAGE_TAG_PREFIX}/build:${BUILD_IMAGE_TAG}" \
161+
--tag "${REGISTRY}${IMAGE_TAG_PREFIX:+/$IMAGE_TAG_PREFIX}:${BUILD_IMAGE_TAG}" \
186162
--file Dockerfile "$SOURCE_DIR"
187163

188164
echo -e "\nDone!\n"
@@ -191,6 +167,6 @@ popd
191167

192168
if [ -n "${EXPORT_PATH}" ];
193169
then
194-
"$SCRIPTPATH/export-data-from-docker-image.sh" "${REGISTRY}/${IMAGE_TAG_PREFIX:+$IMAGE_TAG_PREFIX-}base:${BUILD_IMAGE_TAG}" "${EXPORT_PATH}"
170+
"$SCRIPTPATH/export-data-from-docker-image.sh" "${REGISTRY}${IMAGE_TAG_PREFIX:+/$IMAGE_TAG_PREFIX}/build:${BUILD_IMAGE_TAG}" "${EXPORT_PATH}"
195171
fi
196172

0 commit comments

Comments
 (0)