Skip to content

Commit cafb1d4

Browse files
Maxime Gréaupicandocodigo
authored andcommitted
[CI] non-root user to build artifacts inside the container (#1783)
This commit updates the Dockerfile to create a non-root specific user for building the ES Client artifacts inside the container. This specific user id can be passed at buildtime to make it work on both local dev and CI workflows.
1 parent 54611e3 commit cafb1d4

File tree

4 files changed

+46
-24
lines changed

4 files changed

+46
-24
lines changed

.ci/Dockerfile

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,35 @@
11
ARG RUBY_TEST_VERSION=2.6
22
FROM ruby:${RUBY_TEST_VERSION}
33

4+
# Default UID/GID to 1000
5+
# it can be overridden at build time
6+
ARG BUILDER_UID=1000
7+
ARG BUILDER_GID=1000
8+
ENV BUILDER_USER elastic
9+
ENV BUILDER_GROUP elastic
10+
411
ENV GEM_HOME="/usr/local/bundle"
5-
ENV PATH $GEM_HOME/bin:$GEM_HOME/gems/bin:$PATH
12+
ENV PATH="$GEM_HOME/bin:$GEM_HOME/gems/bin:$PATH"
613
ENV QUIET=true
714
ENV CI=true
815

16+
# Install required tools
17+
RUN apt-get -q update \
18+
&& apt-get -y install zip \
19+
&& apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
20+
21+
# Create user
22+
RUN groupadd --system -g ${BUILDER_GID} ${BUILDER_GROUP} \
23+
&& useradd --system --shell /bin/bash -u ${BUILDER_UID} -g ${BUILDER_GROUP} -d /var/lib/elastic -m elastic 1>/dev/null 2>/dev/null \
24+
&& mkdir -p /usr/src/app && touch /Gemfile.lock \
25+
&& chown -R ${BUILDER_USER}:${BUILDER_GROUP} /usr/src/app /Gemfile.lock
26+
27+
COPY --chown=$BUILDER_USER:$BUILDER_GROUP . .
28+
929
WORKDIR /usr/src/app
1030

11-
COPY . .
31+
USER ${BUILDER_USER}:${BUILDER_GROUP}
1232

13-
RUN apt-get update
14-
RUN apt-get install zip
15-
RUN gem update --system --quiet --silent
16-
RUN bundle install --quiet
17-
RUN bundle exec rake bundle:clean
18-
RUN rake bundle:install
33+
RUN bundle install \
34+
&& bundle exec rake bundle:clean \
35+
&& rake bundle:install

.ci/make.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ echo -e "\033[1m>>>>> Build [elastic/elasticsearch-ruby container] >>>>>>>>>>>>>
116116
# ------------------------------------------------------- #
117117

118118
echo -e "\033[34;1mINFO: building $product container\033[0m"
119-
docker build --file .ci/Dockerfile --tag ${product} .
119+
docker build --build-arg BUILDER_UID="$(id -u)" --file .ci/Dockerfile --tag ${product} .
120120

121121
# ------------------------------------------------------- #
122122
# Run the Container
@@ -131,6 +131,7 @@ args_string="${TASK_ARGS[*]}"
131131
args_string="${args_string// /,}"
132132

133133
docker run \
134+
-u "$(id -u)" \
134135
--env "RUBY_TEST_VERSION=${RUBY_TEST_VERSION}" \
135136
--env "WORKFLOW=${WORKFLOW}" \
136137
--name test-runner \

.ci/run-elasticsearch.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ END
129129
echo -e "\033[34;1mINFO:\033[0m Starting container $node_name \033[0m"
130130
set -x
131131
docker run \
132+
-u "$(id -u)" \
132133
--name "$node_name" \
133134
--network "$network_name" \
134135
--env "ES_JAVA_OPTS=-Xms1g -Xmx1g -da:org.elasticsearch.xpack.ccr.index.engine.FollowingEngineAssertions" \

.ci/run-repository.sh

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ fi
5252

5353
# run the client tests
5454
if [[ $STACK_VERSION == "8.0.0-SNAPSHOT" ]]; then
55-
docker run \
55+
docker run \
56+
-u "$(id -u)" \
5657
--network="${network_name}" \
5758
--env "ELASTIC_CLIENT_APIVERSIONING=true" \
5859
--env "ELASTIC_PASSWORD=${elastic_password}" \
@@ -69,6 +70,7 @@ if [[ $STACK_VERSION == "8.0.0-SNAPSHOT" ]]; then
6970
bundle exec rake elasticsearch:download_artifacts test:rest_api
7071
elif [[ $TEST_SUITE != "platinum" ]]; then
7172
docker run \
73+
-u "$(id -u)" \
7274
--network="${network_name}" \
7375
--env "TEST_ES_SERVER=${elasticsearch_url}" \
7476
--env "TEST_SUITE=${TEST_SUITE}" \
@@ -80,18 +82,19 @@ elif [[ $TEST_SUITE != "platinum" ]]; then
8082
elastic/elasticsearch-ruby \
8183
bundle exec rake elasticsearch:download_artifacts test:rest_api
8284
else
83-
docker run \
84-
--network="${network_name}" \
85-
--env "TEST_ES_SERVER=${elasticsearch_url}" \
86-
--env "ELASTIC_PASSWORD=${elastic_password}" \
87-
--env "TEST_SUITE=${TEST_SUITE}" \
88-
--env "ELASTIC_USER=elastic" \
89-
--env "SINGLE_TEST=${SINGLE_TEST}" \
90-
--env "STACK_VERSION=${STACK_VERSION}" \
91-
--env "ELASTIC_CLIENT_APIVERSIONING=${ELASTIC_API_VERSIONING:-false}" \
92-
--volume $repo:/usr/src/app \
93-
--name elasticsearch-ruby \
94-
--rm \
95-
elastic/elasticsearch-ruby \
96-
bundle exec rake elasticsearch:download_artifacts test:security
85+
docker run \
86+
-u "$(id -u)" \
87+
--network="${network_name}" \
88+
--env "TEST_ES_SERVER=${elasticsearch_url}" \
89+
--env "ELASTIC_PASSWORD=${elastic_password}" \
90+
--env "TEST_SUITE=${TEST_SUITE}" \
91+
--env "ELASTIC_USER=elastic" \
92+
--env "SINGLE_TEST=${SINGLE_TEST}" \
93+
--env "STACK_VERSION=${STACK_VERSION}" \
94+
--env "ELASTIC_CLIENT_APIVERSIONING=${ELASTIC_API_VERSIONING:-false}" \
95+
--volume $repo:/usr/src/app \
96+
--name elasticsearch-ruby \
97+
--rm \
98+
elastic/elasticsearch-ruby \
99+
bundle exec rake elasticsearch:download_artifacts test:security
97100
fi

0 commit comments

Comments
 (0)