Skip to content

Commit c83e0dc

Browse files
committed
ci/docker: Update run_envoy_docker.sh to use docker compose (#40453)
also removes no longer used/tested windows container support Signed-off-by: Ryan Northey <[email protected]>
1 parent aa4dfad commit c83e0dc

File tree

2 files changed

+145
-149
lines changed

2 files changed

+145
-149
lines changed

ci/docker-compose.yml

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
x-envoy-build-base: &envoy-build-base
2+
image: >-
3+
${ENVOY_BUILD_IMAGE:-envoyproxy/envoy-build-ubuntu:f4a881a1205e8e6db1a57162faf3df7aed88eae8@sha256:b10346fe2eee41733dbab0e02322c47a538bf3938d093a5daebad9699860b814}
4+
user: root:root
5+
working_dir: ${ENVOY_DOCKER_SOURCE_DIR:-/source}
6+
stdin_open: true
7+
tty: true
8+
platform: ${ENVOY_DOCKER_PLATFORM:-}
9+
environment:
10+
# Core build environment
11+
- BUILD_DIR=/build
12+
- ENVOY_DOCKER_SOURCE_DIR=${ENVOY_DOCKER_SOURCE_DIR:-/source}
13+
- ENVOY_DOCKER_BUILD_DIR="${ENVOY_DOCKER_BUILD_DIR:-/tmp/envoy-docker-build}"
14+
15+
# Proxy settings
16+
- HTTP_PROXY
17+
- HTTPS_PROXY
18+
- NO_PROXY
19+
- GOPROXY
20+
21+
# Bazel configuration
22+
- BAZEL_STARTUP_OPTIONS
23+
- BAZEL_BUILD_EXTRA_OPTIONS
24+
- BAZEL_EXTRA_TEST_OPTIONS
25+
- BAZEL_REMOTE_CACHE
26+
- BAZEL_STARTUP_EXTRA_OPTIONS
27+
- BAZEL_REMOTE_INSTANCE
28+
- BAZELISK_BASE_URL
29+
30+
# CI/CD variables
31+
- CI_BRANCH
32+
- CI_SHA1
33+
- CI_TARGET_BRANCH
34+
- BUILD_REASON
35+
- GITHUB_REF_NAME
36+
- GITHUB_REF_TYPE
37+
- GITHUB_TOKEN
38+
- GITHUB_APP_ID
39+
- GITHUB_INSTALL_ID
40+
41+
# Build configuration
42+
- NUM_CPUS
43+
- ENVOY_BRANCH
44+
- ENVOY_RBE
45+
- ENVOY_BUILD_IMAGE
46+
- ENVOY_SRCDIR
47+
- ENVOY_BUILD_TARGET
48+
- ENVOY_BUILD_DEBUG_INFORMATION
49+
- ENVOY_BUILD_FILTER_EXAMPLE
50+
- ENVOY_COMMIT
51+
- ENVOY_HEAD_REF
52+
- ENVOY_REPO
53+
- ENVOY_BUILD_ARCH
54+
- ENVOY_GEN_COMPDB_OPTIONS
55+
56+
# Publishing and artifacts
57+
- DOCKERHUB_USERNAME
58+
- DOCKERHUB_PASSWORD
59+
- ENVOY_DOCKER_SAVE_IMAGE
60+
- ENVOY_PUBLISH_DRY_RUN
61+
- ENVOY_TARBALL_DIR
62+
- GCS_ARTIFACT_BUCKET
63+
- GCS_REDIRECT_PATH
64+
- GCP_SERVICE_ACCOUNT_KEY
65+
- GCP_SERVICE_ACCOUNT_KEY_PATH
66+
67+
- MOBILE_DOCS_CHECKOUT_DIR
68+
- SYSTEM_STAGEDISPLAYNAME
69+
- SYSTEM_JOBDISPLAYNAME
70+
- SSH_AUTH_SOCK
71+
72+
entrypoint:
73+
- "/bin/bash"
74+
- "-c"
75+
- |
76+
groupadd --gid ${DOCKER_GID:-${USER_GID:-$(id -g)}} -f envoygroup
77+
useradd -o \
78+
--uid ${USER_UID:-$(id -u)} \
79+
--gid ${DOCKER_GID:-${USER_GID:-$(id -g)}} \
80+
--no-create-home \
81+
-s /bin/bash \
82+
--home-dir /build envoybuild
83+
usermod -a -G pcap envoybuild
84+
chown envoybuild:envoygroup /build
85+
chown envoybuild /proc/self/fd/2 2>/dev/null || true
86+
[[ -e /entrypoint-extra.sh ]] && /entrypoint-extra.sh
87+
sudo -EHs -u envoybuild bash -c 'cd ${ENVOY_DOCKER_SOURCE_DIR:-/source} && exec ${DOCKER_COMMAND:-bash}'
88+
89+
services:
90+
envoy-build:
91+
<<: *envoy-build-base
92+
volumes:
93+
- ${ENVOY_DOCKER_BUILD_DIR:-/tmp/envoy-docker-build}:/build
94+
- ${SOURCE_DIR:-..}:/source
95+
- ${SHARED_TMP_DIR:-/tmp/bazel-shared}:${SHARED_TMP_DIR:-/tmp/bazel-shared}
96+
97+
envoy-build-gpg:
98+
<<: *envoy-build-base
99+
volumes:
100+
- ${ENVOY_DOCKER_BUILD_DIR:-/tmp/envoy-docker-build}:/build
101+
- ${SOURCE_DIR:-..}:/source
102+
- ${ENVOY_GPG_DIR-${HOME}/.gnupg}:/build/.gnupg
103+
- ${SHARED_TMP_DIR:-/tmp/bazel-shared}:${SHARED_TMP_DIR:-/tmp/bazel-shared}
104+
105+
envoy-build-dind:
106+
privileged: true
107+
<<: *envoy-build-base
108+
volumes:
109+
- ${ENVOY_DOCKER_BUILD_DIR:-/tmp/envoy-docker-build}:/build
110+
- ${SOURCE_DIR:-..}:/source
111+
- /var/run/docker.sock:/var/run/docker.sock
112+
- ${SHARED_TMP_DIR:-/tmp/bazel-shared}:${SHARED_TMP_DIR:-/tmp/bazel-shared}

ci/run_envoy_docker.sh

Lines changed: 33 additions & 149 deletions
Original file line numberDiff line numberDiff line change
@@ -2,172 +2,56 @@
22

33
set -e
44

5-
CURRENT_SCRIPT_DIR="$(realpath "$(dirname "${BASH_SOURCE[0]}")")"
5+
# TODO(phlax): Add a check that a usable version of docker compose is available
66

7-
# shellcheck source=ci/envoy_build_sha.sh
8-
. "${CURRENT_SCRIPT_DIR}"/envoy_build_sha.sh
97

10-
function is_windows() {
11-
[[ "$(uname -s)" == *NT* ]]
12-
}
8+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9+
10+
# Source build SHA information
11+
# shellcheck source=ci/envoy_build_sha.sh
12+
source "${SCRIPT_DIR}/envoy_build_sha.sh"
1313

14-
read -ra ENVOY_DOCKER_OPTIONS <<< "${ENVOY_DOCKER_OPTIONS:-}"
14+
# User/group IDs
15+
USER_UID="$(id -u)"
16+
USER_GID="$(id -g)"
17+
export USER_UID
18+
export USER_GID
1519

20+
# These should probably go in users .env as docker compose will pick that up
1621
export HTTP_PROXY="${HTTP_PROXY:-${http_proxy:-}}"
1722
export HTTPS_PROXY="${HTTPS_PROXY:-${https_proxy:-}}"
1823
export NO_PROXY="${NO_PROXY:-${no_proxy:-}}"
1924
export GOPROXY="${GOPROXY:-${go_proxy:-}}"
2025

21-
if is_windows; then
22-
[[ -z "${IMAGE_NAME}" ]] && IMAGE_NAME="envoyproxy/envoy-build-windows2019"
23-
# TODO(sunjayBhatia): Currently ENVOY_DOCKER_OPTIONS is ignored on Windows because
24-
# CI sets it to a Linux-specific value. Undo this once https://github.com/envoyproxy/envoy/issues/13272
25-
# is resolved.
26-
ENVOY_DOCKER_OPTIONS=()
27-
# Replace MSYS style drive letter (/c/) with Windows drive letter designation (C:/)
28-
DEFAULT_ENVOY_DOCKER_BUILD_DIR=$(echo "${TEMP}" | sed -E "s#^/([a-zA-Z])/#\1:/#")/envoy-docker-build
29-
BUILD_DIR_MOUNT_DEST=C:/build
30-
SOURCE_DIR=$(echo "${PWD}" | sed -E "s#^/([a-zA-Z])/#\1:/#")
31-
SOURCE_DIR_MOUNT_DEST=C:/source
32-
START_COMMAND=("bash" "-c" "cd /c/source && export HOME=/c/build && $*")
33-
else
34-
[[ -z "${IMAGE_NAME}" ]] && IMAGE_NAME="envoyproxy/envoy-build-ubuntu"
35-
# We run as root and later drop permissions. This is required to setup the USER
36-
# in useradd below, which is need for correct Python execution in the Docker
37-
# environment.
38-
ENVOY_DOCKER_OPTIONS+=(-u root:root)
39-
DOCKER_USER_ARGS=()
40-
DOCKER_GROUP_ARGS=()
41-
DEFAULT_ENVOY_DOCKER_BUILD_DIR=/tmp/envoy-docker-build
42-
USER_UID="$(id -u)"
43-
USER_GID="$(id -g)"
44-
if [[ -n "$ENVOY_DOCKER_IN_DOCKER" ]]; then
45-
ENVOY_DOCKER_OPTIONS+=(-v /var/run/docker.sock:/var/run/docker.sock)
46-
DOCKER_GID="$(stat -c %g /var/run/docker.sock 2>/dev/null || stat -f %g /var/run/docker.sock)"
47-
DOCKER_USER_ARGS=(--gid "${DOCKER_GID}")
48-
DOCKER_GROUP_ARGS=(--gid "${DOCKER_GID}")
49-
else
50-
DOCKER_GROUP_ARGS+=(--gid "${USER_GID}")
51-
DOCKER_USER_ARGS+=(--gid "${USER_GID}")
52-
fi
53-
BUILD_DIR_MOUNT_DEST=/build
54-
SOURCE_DIR="${PWD}"
55-
SOURCE_DIR_MOUNT_DEST=/source
56-
ENVOY_DOCKER_SOURCE_DIR="${ENVOY_DOCKER_SOURCE_DIR:-${SOURCE_DIR_MOUNT_DEST}}"
57-
START_COMMAND=(
58-
"/bin/bash"
59-
"-lc"
60-
"groupadd ${DOCKER_GROUP_ARGS[*]} -f envoygroup \
61-
&& useradd -o --uid ${USER_UID} ${DOCKER_USER_ARGS[*]} --no-create-home --home-dir /build envoybuild \
62-
&& usermod -a -G pcap envoybuild \
63-
&& chown envoybuild:envoygroup /build \
64-
&& chown envoybuild /proc/self/fd/2 \
65-
&& sudo -EHs -u envoybuild bash -c 'cd ${ENVOY_DOCKER_SOURCE_DIR} && $*'")
26+
# Docker-in-Docker handling
27+
if [[ -n "$ENVOY_DOCKER_IN_DOCKER" ]]; then
28+
DOCKER_GID="$(stat -c %g /var/run/docker.sock 2>/dev/null || echo "$USER_GID")"
29+
export DOCKER_GID
30+
fi
31+
32+
if [[ -n "$ENVOY_DOCKER_IN_DOCKER" || -n "$ENVOY_SHARED_TMP_DIR" ]]; then
33+
export SHARED_TMP_DIR="${ENVOY_SHARED_TMP_DIR:-/tmp/bazel-shared}"
34+
mkdir -p "${SHARED_TMP_DIR}"
35+
chmod 777 "${SHARED_TMP_DIR}"
6636
fi
6737

6838
if [[ -n "$ENVOY_DOCKER_PLATFORM" ]]; then
6939
echo "Setting Docker platform: ${ENVOY_DOCKER_PLATFORM}"
7040
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
71-
ENVOY_DOCKER_OPTIONS+=(--platform "$ENVOY_DOCKER_PLATFORM")
7241
fi
7342

74-
# The IMAGE_ID defaults to the CI hash but can be set to an arbitrary image ID (found with 'docker
75-
# images').
76-
if [[ -z "${IMAGE_ID}" ]]; then
77-
IMAGE_ID="${ENVOY_BUILD_SHA}"
78-
if ! is_windows && [[ -n "$ENVOY_BUILD_CONTAINER_SHA" ]]; then
79-
IMAGE_ID="${ENVOY_BUILD_SHA}@sha256:${ENVOY_BUILD_CONTAINER_SHA}"
80-
fi
81-
fi
82-
[[ -z "${ENVOY_DOCKER_BUILD_DIR}" ]] && ENVOY_DOCKER_BUILD_DIR="${DEFAULT_ENVOY_DOCKER_BUILD_DIR}"
83-
# Replace backslash with forward slash for Windows style paths
84-
ENVOY_DOCKER_BUILD_DIR="${ENVOY_DOCKER_BUILD_DIR//\\//}"
85-
mkdir -p "${ENVOY_DOCKER_BUILD_DIR}"
86-
87-
[[ -t 1 ]] && ENVOY_DOCKER_OPTIONS+=("-it")
88-
[[ -f .git ]] && [[ ! -d .git ]] && ENVOY_DOCKER_OPTIONS+=(-v "$(git rev-parse --git-common-dir):$(git rev-parse --git-common-dir)")
89-
[[ -n "${SSH_AUTH_SOCK}" ]] && ENVOY_DOCKER_OPTIONS+=(-v "${SSH_AUTH_SOCK}:${SSH_AUTH_SOCK}" -e SSH_AUTH_SOCK)
90-
91-
export ENVOY_BUILD_IMAGE="${IMAGE_NAME}:${IMAGE_ID}"
92-
93-
VOLUMES=(
94-
-v "${ENVOY_DOCKER_BUILD_DIR}":"${BUILD_DIR_MOUNT_DEST}"
95-
-v "${SOURCE_DIR}":"${SOURCE_DIR_MOUNT_DEST}")
43+
export DOCKER_COMMAND="${*:-bash}"
9644

45+
COMPOSE_SERVICE="envoy-build"
9746
if [[ -n "$MOUNT_GPG_HOME" ]]; then
98-
VOLUMES+=(
99-
-v "${HOME}/.gnupg:${BUILD_DIR_MOUNT_DEST}/.gnupg")
100-
fi
101-
102-
if ! is_windows; then
103-
export BUILD_DIR="${BUILD_DIR_MOUNT_DEST}"
104-
fi
105-
106-
if [[ -n "$ENVOY_DOCKER_IN_DOCKER" || -n "$ENVOY_SHARED_TMP_DIR" ]]; then
107-
# Create a "shared" directory that has the same path in/outside the container
108-
# This allows the host docker engine to see artefacts using a temporary path created inside the container,
109-
# at the same path.
110-
# For example, a directory created with `mktemp -d --tmpdir /tmp/bazel-shared` can be mounted as a volume
111-
# from within the build container.
112-
SHARED_TMP_DIR="${ENVOY_SHARED_TMP_DIR:-/tmp/bazel-shared}"
113-
mkdir -p "${SHARED_TMP_DIR}"
114-
chmod +rwx "${SHARED_TMP_DIR}"
115-
VOLUMES+=(-v "${SHARED_TMP_DIR}":"${SHARED_TMP_DIR}")
116-
fi
117-
118-
if [[ -n "${ENVOY_DOCKER_PULL}" ]]; then
119-
time docker pull "${ENVOY_BUILD_IMAGE}"
47+
COMPOSE_SERVICE="envoy-build-gpg"
48+
elif [[ -n "$ENVOY_DOCKER_IN_DOCKER" ]]; then
49+
COMPOSE_SERVICE="envoy-build-dind"
12050
fi
12151

122-
# Since we specify an explicit hash, docker-run will pull from the remote repo if missing.
123-
docker run --rm \
124-
"${ENVOY_DOCKER_OPTIONS[@]}" \
125-
"${VOLUMES[@]}" \
126-
-e BUILD_DIR \
127-
-e HTTP_PROXY \
128-
-e HTTPS_PROXY \
129-
-e NO_PROXY \
130-
-e GOPROXY \
131-
-e BAZEL_STARTUP_OPTIONS \
132-
-e BAZEL_BUILD_EXTRA_OPTIONS \
133-
-e BAZEL_EXTRA_TEST_OPTIONS \
134-
-e BAZEL_REMOTE_CACHE \
135-
-e BAZEL_STARTUP_EXTRA_OPTIONS \
136-
-e CI_BRANCH \
137-
-e CI_SHA1 \
138-
-e CI_TARGET_BRANCH \
139-
-e DOCKERHUB_USERNAME \
140-
-e DOCKERHUB_PASSWORD \
141-
-e ENVOY_DOCKER_SAVE_IMAGE \
142-
-e BUILD_REASON \
143-
-e BAZEL_REMOTE_INSTANCE \
144-
-e GCP_SERVICE_ACCOUNT_KEY \
145-
-e GCP_SERVICE_ACCOUNT_KEY_PATH \
146-
-e NUM_CPUS \
147-
-e ENVOY_BRANCH \
148-
-e ENVOY_RBE \
149-
-e ENVOY_BUILD_IMAGE \
150-
-e ENVOY_SRCDIR \
151-
-e ENVOY_BUILD_TARGET \
152-
-e ENVOY_BUILD_DEBUG_INFORMATION \
153-
-e ENVOY_BUILD_FILTER_EXAMPLE \
154-
-e ENVOY_COMMIT \
155-
-e ENVOY_HEAD_REF \
156-
-e ENVOY_PUBLISH_DRY_RUN \
157-
-e ENVOY_REPO \
158-
-e ENVOY_TARBALL_DIR \
159-
-e ENVOY_GEN_COMPDB_OPTIONS \
160-
-e GCS_ARTIFACT_BUCKET \
161-
-e GCS_REDIRECT_PATH \
162-
-e GITHUB_REF_NAME \
163-
-e GITHUB_REF_TYPE \
164-
-e GITHUB_TOKEN \
165-
-e GITHUB_APP_ID \
166-
-e GITHUB_INSTALL_ID \
167-
-e MOBILE_DOCS_CHECKOUT_DIR \
168-
-e BAZELISK_BASE_URL \
169-
-e ENVOY_BUILD_ARCH \
170-
-e SYSTEM_STAGEDISPLAYNAME \
171-
-e SYSTEM_JOBDISPLAYNAME \
172-
"${ENVOY_BUILD_IMAGE}" \
173-
"${START_COMMAND[@]}"
52+
exec docker compose \
53+
-f "${SCRIPT_DIR}/docker-compose.yml" \
54+
${ENVOY_DOCKER_PLATFORM:+-p "$ENVOY_DOCKER_PLATFORM"} \
55+
run \
56+
--rm \
57+
"${COMPOSE_SERVICE}"

0 commit comments

Comments
 (0)