Skip to content

Commit 8b31bac

Browse files
Merge branch 'build-git-lfs-in-ubi-base'
Build git-lfs in the base UBI fips image as multiarch See merge request https://gitlab.com/gitlab-org/gitlab-runner/-/merge_requests/4219
2 parents d92a699 + fdd91c9 commit 8b31bac

File tree

9 files changed

+65
-35
lines changed

9 files changed

+65
-35
lines changed

.gitlab/ci/_rules.gitlab-ci.yml

+11
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,17 @@
263263
changes:
264264
- dockerfiles/ci/go.fips.Dockerfile
265265
- dockerfiles/ci/go.fips.Dockerfile.rebuild
266+
- dockerfiles/ci/ubi.fips.base.Dockerfile
267+
- dockerfiles/ci/ubi.fips.base.Dockerfile.rebuild
268+
- .gitlab/ci/prepare.gitlab-ci.yml
269+
- .gitlab/ci/_common.gitlab-ci.yml
270+
271+
.rules:prepare:ubi-base:image:merge-requests:
272+
rules:
273+
- <<: *if-runner-merge-request-pipeline
274+
changes:
275+
- dockerfiles/ci/ubi.fips.base.Dockerfile
276+
- dockerfiles/ci/ubi.fips.base.Dockerfile.rebuild
266277
- .gitlab/ci/prepare.gitlab-ci.yml
267278
- .gitlab/ci/_common.gitlab-ci.yml
268279

.gitlab/ci/prepare.gitlab-ci.yml

+2-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ prepare go fips:
8282
prepare ubi base:
8383
extends:
8484
- .docker
85-
- .rules:prepare:go-fips:image:merge-requests
85+
- .rules:prepare:ubi-base:image:merge-requests
86+
timeout: 4h
8687
stage: prepare
8788
image: docker:${DOCKER_VERSION}-git
8889
script:

Makefile.build.mk

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ go-fips-docker:
2727
ubi-fips-base-docker: export UBI_VERSION ?= $(UBI_FIPS_VERSION)
2828
ubi-fips-base-docker: export BUILD_IMAGE ?= registry.gitlab.com/gitlab-org/gitlab-runner/ubi-fips-base:$(UBI_FIPS_VERSION)
2929
ubi-fips-base-docker: export GIT_VERSION ?= $(GIT_VERSION)
30+
ubi-fips-base-docker: export GIT_LFS_VERSION ?= $(GIT_LFS_VERSION)
3031
ubi-fips-base-docker: export BUILD_DOCKERFILE ?= ./dockerfiles/ci/ubi.fips.base.Dockerfile
3132
ubi-fips-base-docker:
3233
# Building UBI FIPS base Docker image

ci/build_ubi_fips_base_image

+16-3
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,35 @@
22

33
set -eo pipefail
44

5+
# shellcheck source=ci/docker_commands
6+
source "ci/docker_commands"
7+
8+
# source order is important as some functions overlap in name
59
source "ci/_build_ci_image_common"
610

711
build() {
812
echo "Building UBI FIPS base image: ${BUILD_IMAGE}"
9-
docker build \
10-
--cache-from "${BUILD_IMAGE}" \
13+
14+
trap cleanup_docker_context_trap ERR SIGINT SIGTERM
15+
setup_docker_context
16+
17+
_docker_buildx build \
18+
--platform linux/amd64,linux/ppc64le,linux/arm64 \
19+
--no-cache \
1120
--build-arg UBI_VERSION="${UBI_VERSION}" \
1221
--build-arg GIT_VERSION="${GIT_VERSION}" \
22+
--build-arg GIT_LFS_VERSION="${GIT_LFS_VERSION}" \
23+
--push \
1324
-t "${BUILD_IMAGE}" \
1425
-f "${BUILD_DOCKERFILE}" \
1526
"${GIT_ROOT}"
27+
28+
trap - ERR SIGINT SIGTERM
29+
cleanup_docker_context
1630
}
1731

1832
login
1933
pull
2034
build
21-
push
2235
logout
2336
scan

dockerfiles/runner/ubi-fips/build_git_lfs renamed to dockerfiles/ci/build_git_lfs

+5-6
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,10 @@ set -eo pipefail
1313
cd /tmp
1414

1515
downloadURL="https://github.com/git-lfs/git-lfs/archive/refs/tags/v${GIT_LFS_VERSION}.tar.gz"
16-
wget "${downloadURL}" -O git-lfs-${GIT_LFS_VERSION}.tar.gz
16+
wget "${downloadURL}" -O "git-lfs-${GIT_LFS_VERSION}.tar.gz"
1717

18-
tar -xzf git-lfs-${GIT_LFS_VERSION}.tar.gz
19-
make -C git-lfs-${GIT_LFS_VERSION}
20-
cp git-lfs-${GIT_LFS_VERSION}/bin/git-lfs /usr/bin/
21-
rm -fr /tmp/*
22-
git-lfs install --skip-repo
18+
tar -xzf "git-lfs-${GIT_LFS_VERSION}.tar.gz"
19+
make -C "git-lfs-${GIT_LFS_VERSION}"
20+
cp "git-lfs-${GIT_LFS_VERSION}/bin/git-lfs" /usr/bin/
21+
rm -rf /tmp/*
2322
git-lfs version

dockerfiles/ci/ubi.fips.base.Dockerfile

+18-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,21 @@
11
ARG UBI_VERSION
22

3-
FROM redhat/ubi8-minimal:${UBI_VERSION}
3+
FROM redhat/ubi8-minimal:${UBI_VERSION} AS git_lfs
44

5-
ARG PLATFORM_ARCH=amd64
5+
ARG GIT_LFS_VERSION
6+
# Build git-lfs from source. This is necessary to resolve a number of CVES
7+
# vulnerabilties reported against this image.
8+
#
9+
# We can probably remove this on the next release of git-lfs.
10+
# See https://gitlab.com/gitlab-org/gitlab-runner/-/issues/31065
11+
COPY dockerfiles/ci/build_git_lfs /tmp/
12+
13+
RUN microdnf update -y && \
14+
microdnf install -y --setopt=tsflags=nodocs \
15+
wget make git tar gzip go && \
16+
/tmp/build_git_lfs
17+
18+
FROM redhat/ubi8-minimal:${UBI_VERSION}
619

720
RUN microdnf update -y && \
821
microdnf install -y --setopt=tsflags=nodocs \
@@ -42,6 +55,9 @@ RUN wget https://github.com/git/git/archive/refs/tags/v${GIT_VERSION}.tar.gz &&
4255
rm -rf /git-${GIT_VERSION} && \
4356
microdnf remove autoconf emacs-filesystem
4457

58+
COPY --from=git_lfs /usr/bin/git-lfs /usr/bin
59+
RUN git-lfs install --skip-repo
60+
4561
RUN cd /tmp && \
4662
git clone https://github.com/larsks/fakeprovide.git && \
4763
cd fakeprovide && \

dockerfiles/runner-helper/Dockerfile.fips

-3
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,11 @@ ENV PATH="${PATH:-/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin}"
99
RUN microdnf update -y && \
1010
microdnf install -y \
1111
bash \
12-
git-lfs \
1312
wget \
1413
findutils && \
1514
wget -O /usr/bin/dumb-init https://github.com/Yelp/dumb-init/releases/download/v1.2.5/dumb-init_1.2.5_x86_64 && \
1615
chmod +x /usr/bin/dumb-init
1716

18-
RUN git lfs install --skip-repo
19-
2017
COPY ./helpers/entrypoint /
2118
RUN chmod +x /entrypoint
2219

dockerfiles/runner/install-deps

+11-9
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,17 @@ else
5454
fi
5555
wget -nv "https://github.com/Yelp/dumb-init/releases/download/v${DUMB_INIT_VERSION}/dumb-init_${DUMB_INIT_VERSION}_${DUMB_INIT_ARCH}" \
5656
-O /usr/bin/dumb-init
57-
wget -nv "https://github.com/git-lfs/git-lfs/releases/download/v${GIT_LFS_VERSION}/git-lfs-linux-${GIT_LFS_ARCH}-v${GIT_LFS_VERSION}.tar.gz" \
58-
-O /tmp/git-lfs.tar.gz
59-
sha256sum -c -w "${SCRIPTPATH}/checksums-${ARCH}"
57+
58+
if [ -n "$GIT_LFS_VERSION" ]; then
59+
wget -nv "https://github.com/git-lfs/git-lfs/releases/download/v${GIT_LFS_VERSION}/git-lfs-linux-${GIT_LFS_ARCH}-v${GIT_LFS_VERSION}.tar.gz" \
60+
-O /tmp/git-lfs.tar.gz
61+
sha256sum -c -w "${SCRIPTPATH}/checksums-${ARCH}"
62+
tar -xf /tmp/git-lfs.tar.gz -C /tmp/
63+
mv "/tmp/git-lfs-${GIT_LFS_VERSION}/git-lfs" /usr/bin/git-lfs
64+
rm -rf /tmp/git-lfs*
65+
git-lfs install --skip-repo
66+
git-lfs version
67+
fi
6068

6169
if [[ -f /usr/bin/docker-machine ]]; then
6270
chmod +x /usr/bin/docker-machine
@@ -65,9 +73,3 @@ fi
6573

6674
chmod +x /usr/bin/dumb-init
6775
dumb-init --version
68-
69-
tar -xf /tmp/git-lfs.tar.gz -C /tmp/
70-
mv /tmp/git-lfs-${GIT_LFS_VERSION}/git-lfs /usr/bin/git-lfs
71-
rm -rf /tmp/git-lfs*
72-
git-lfs install --skip-repo
73-
git-lfs version

dockerfiles/runner/ubi-fips/Dockerfile

+1-11
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,11 @@ ARG TARGETPLATFORM
66

77
ARG DOCKER_MACHINE_VERSION
88
ARG DUMB_INIT_VERSION
9-
ARG GIT_LFS_VERSION
109

1110
COPY gitlab-runner_*.rpm checksums-* install-deps install-gitlab-runner /tmp/
12-
RUN /tmp/install-deps "${TARGETPLATFORM}" "${DOCKER_MACHINE_VERSION}" "${DUMB_INIT_VERSION}" "${GIT_LFS_VERSION}"
11+
RUN /tmp/install-deps "${TARGETPLATFORM}" "${DOCKER_MACHINE_VERSION}" "${DUMB_INIT_VERSION}"
1312
RUN rm -rf /tmp/* /etc/gitlab-runner/.runner_system_id
1413

15-
# Build git-lfs from source. This is necessary to resolve a number of CVES
16-
# vulnerabilties reported against this image.
17-
#
18-
# We can probably remove this on the next release of git-lfs.
19-
# See https://gitlab.com/gitlab-org/gitlab-runner/-/issues/31065
20-
RUN microdnf install -y --setopt=tsflags=nodocs go
21-
COPY build_git_lfs /tmp/
22-
RUN /tmp/build_git_lfs
23-
2414
FROM $BASE_IMAGE
2515

2616
COPY --from=0 / /

0 commit comments

Comments
 (0)