Enable building arm64 images

Modify the Dockerfile and library code around Docker image builds to
support building multiarch images. The Dockerfile will download the
package for the correct architecture based on TARGETARCH variable.

Closes: https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/8470

Signed-off-by: Balasankar 'Balu' C <balasankar@gitlab.com>
This commit is contained in:
Balasankar 'Balu' C 2024-03-20 15:09:24 +05:30
parent f8c71c7a9c
commit ca02e0c220
No known key found for this signature in database
GPG Key ID: B77D2E2E23735427
5 changed files with 32 additions and 7 deletions

View File

@ -10,6 +10,8 @@ ENV LANG=C.UTF-8
COPY locale.gen /etc/locale.gen COPY locale.gen /etc/locale.gen
# Install required packages # Install required packages
# Note: libatomic1 is only required for arm64, but it is small enough to not
# bother about the conditional inclusion logic
RUN apt-get update -q \ RUN apt-get update -q \
&& DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \ && DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \
busybox \ busybox \
@ -20,6 +22,7 @@ RUN apt-get update -q \
wget \ wget \
perl \ perl \
libperl5.34 \ libperl5.34 \
libatomic1 \
&& locale-gen \ && locale-gen \
&& cp -a /usr/lib/locale/locale-archive /tmp/locale-archive \ && cp -a /usr/lib/locale/locale-archive /tmp/locale-archive \
&& DEBIAN_FRONTEND=noninteractive apt-get purge -yq locales \ && DEBIAN_FRONTEND=noninteractive apt-get purge -yq locales \
@ -43,6 +46,8 @@ RUN ln -fs /dev/null /run/motd.dynamic
# Legacy code to be removed on 17.0. See: https://gitlab.com/gitlab-org/omnibus-gitlab/-/merge_requests/7035 # Legacy code to be removed on 17.0. See: https://gitlab.com/gitlab-org/omnibus-gitlab/-/merge_requests/7035
ENV GITLAB_ALLOW_SHA1_RSA=false ENV GITLAB_ALLOW_SHA1_RSA=false
ARG TARGETARCH
# Copy assets # Copy assets
COPY RELEASE / COPY RELEASE /
COPY assets/ /assets/ COPY assets/ /assets/

View File

@ -10,9 +10,19 @@ source /RELEASE
sed -i "/DOWNLOAD_URL/d;/CI_JOB_TOKEN/d;" /RELEASE sed -i "/DOWNLOAD_URL/d;/CI_JOB_TOKEN/d;" /RELEASE
# Install GitLab # Install GitLab
if [[ "${TARGETARCH}" == "amd64" ]]; then
export DOWNLOAD_URL=${DOWNLOAD_URL_amd64}
elif [[ "${TARGETARCH}" == "arm64" ]]; then
export DOWNLOAD_URL=${DOWNLOAD_URL_arm64}
else
echo "Unknown TARGETARCH: DOWNLOAD_URL not set"
fi
DOWNLOAD_URL=${DOWNLOAD_URL} CI_JOB_TOKEN=${CI_JOB_TOKEN} /assets/download-package && dpkg -i /tmp/gitlab.deb DOWNLOAD_URL=${DOWNLOAD_URL} CI_JOB_TOKEN=${CI_JOB_TOKEN} /assets/download-package && dpkg -i /tmp/gitlab.deb
rm -rf /tmp/gitlab.deb /var/lib/apt/lists/* rm -rf /tmp/gitlab.deb /var/lib/apt/lists/*
unset DOWNLOAD_URL_amd64
unset DOWNLOAD_URL_arm64
unset DOWNLOAD_URL unset DOWNLOAD_URL
unset CI_JOB_TOKEN unset CI_JOB_TOKEN

View File

@ -315,6 +315,8 @@ Ubuntu-22.04-arm64-branch:
- !reference [.default_rules, rules] - !reference [.default_rules, rules]
- if: '$PIPELINE_TYPE =~ /_(NIGHTLY|BRANCH)_BUILD_PIPELINE$/' - if: '$PIPELINE_TYPE =~ /_(NIGHTLY|BRANCH)_BUILD_PIPELINE$/'
- if: '$PIPELINE_TYPE =~ /TRIGGERED_(CE|EE)_PIPELINE/' - if: '$PIPELINE_TYPE =~ /TRIGGERED_(CE|EE)_PIPELINE/'
# TODO: When multi-arch images are built by default, make this an
# automatic job
when: manual when: manual
allow_failure: true allow_failure: true
CentOS-7-branch: CentOS-7-branch:

View File

@ -13,15 +13,19 @@ module Build
def release_file_contents def release_file_contents
repo = Gitlab::Util.get_env('PACKAGECLOUD_REPO') # Target repository repo = Gitlab::Util.get_env('PACKAGECLOUD_REPO') # Target repository
download_urls = {}.tap do |urls|
urls[:amd64] = Build::Info::CI.package_download_url
urls[:arm64] = Build::Info::CI.package_download_url(arch: 'arm64')
end
download_url = Build::Info::CI.package_download_url raise "Unable to identify package download URLs." if download_urls.empty?
raise "Unable to identify package download URL." unless download_url
contents = [] contents = []
contents << "PACKAGECLOUD_REPO=#{repo.chomp}\n" if repo && !repo.empty? contents << "PACKAGECLOUD_REPO=#{repo.chomp}\n" if repo && !repo.empty?
contents << "RELEASE_PACKAGE=#{Build::Info::Package.name}\n" contents << "RELEASE_PACKAGE=#{Build::Info::Package.name}\n"
contents << "RELEASE_VERSION=#{Build::Info::Package.release_version}\n" contents << "RELEASE_VERSION=#{Build::Info::Package.release_version}\n"
contents << "DOWNLOAD_URL=#{download_url}\n" contents << "DOWNLOAD_URL_amd64=#{download_urls[:amd64]}\n"
contents << "DOWNLOAD_URL_arm64=#{download_urls[:arm64]}\n"
contents << "CI_JOB_TOKEN=#{Build::Info::CI.job_token}\n" contents << "CI_JOB_TOKEN=#{Build::Info::CI.job_token}\n"
contents.join contents.join
end end

View File

@ -109,7 +109,8 @@ RSpec.describe Build::Image do
"PACKAGECLOUD_REPO=download-package", "PACKAGECLOUD_REPO=download-package",
"RELEASE_PACKAGE=gitlab-ce", "RELEASE_PACKAGE=gitlab-ce",
"RELEASE_VERSION=12.121.12-ce.0", "RELEASE_VERSION=12.121.12-ce.0",
"DOWNLOAD_URL=https://dev.gitlab.org/api/v4/projects/283/jobs/999999/artifacts/pkg/ubuntu-jammy/gitlab-ce_12.121.12-ce.0_amd64.deb", "DOWNLOAD_URL_amd64=https://dev.gitlab.org/api/v4/projects/283/jobs/999999/artifacts/pkg/ubuntu-jammy/gitlab-ce_12.121.12-ce.0_amd64.deb",
"DOWNLOAD_URL_arm64=https://dev.gitlab.org/api/v4/projects/283/jobs/999999/artifacts/pkg/ubuntu-jammy_aarch64/gitlab-ce_12.121.12-ce.0_arm64.deb",
"CI_JOB_TOKEN=NOT-CI-JOB-TOKEN\n" "CI_JOB_TOKEN=NOT-CI-JOB-TOKEN\n"
].join("\n") ].join("\n")
end end
@ -130,7 +131,8 @@ RSpec.describe Build::Image do
"PACKAGECLOUD_REPO=download-package", "PACKAGECLOUD_REPO=download-package",
"RELEASE_PACKAGE=gitlab-ee", "RELEASE_PACKAGE=gitlab-ee",
"RELEASE_VERSION=12.121.12-ee.0", "RELEASE_VERSION=12.121.12-ee.0",
"DOWNLOAD_URL=https://dev.gitlab.org/api/v4/projects/283/jobs/999999/artifacts/pkg/ubuntu-jammy/gitlab-ee_12.121.12-ee.0_amd64.deb", "DOWNLOAD_URL_amd64=https://dev.gitlab.org/api/v4/projects/283/jobs/999999/artifacts/pkg/ubuntu-jammy/gitlab-ee_12.121.12-ee.0_amd64.deb",
"DOWNLOAD_URL_arm64=https://dev.gitlab.org/api/v4/projects/283/jobs/999999/artifacts/pkg/ubuntu-jammy_aarch64/gitlab-ee_12.121.12-ee.0_arm64.deb",
"CI_JOB_TOKEN=NOT-CI-JOB-TOKEN\n" "CI_JOB_TOKEN=NOT-CI-JOB-TOKEN\n"
].join("\n") ].join("\n")
end end
@ -159,7 +161,8 @@ RSpec.describe Build::Image do
"PACKAGECLOUD_REPO=download-package", "PACKAGECLOUD_REPO=download-package",
"RELEASE_PACKAGE=gitlab-ce", "RELEASE_PACKAGE=gitlab-ce",
"RELEASE_VERSION=12.121.12-ce.0", "RELEASE_VERSION=12.121.12-ce.0",
"DOWNLOAD_URL=https://gitlab.com/api/v4/projects/20699/jobs/999999/artifacts/pkg/ubuntu-jammy/gitlab-ce_12.121.12-ce.0_amd64.deb", "DOWNLOAD_URL_amd64=https://gitlab.com/api/v4/projects/20699/jobs/999999/artifacts/pkg/ubuntu-jammy/gitlab-ce_12.121.12-ce.0_amd64.deb",
"DOWNLOAD_URL_arm64=https://gitlab.com/api/v4/projects/20699/jobs/999999/artifacts/pkg/ubuntu-jammy_aarch64/gitlab-ce_12.121.12-ce.0_arm64.deb",
"CI_JOB_TOKEN=NOT-CI-JOB-TOKEN\n" "CI_JOB_TOKEN=NOT-CI-JOB-TOKEN\n"
].join("\n") ].join("\n")
end end
@ -180,7 +183,8 @@ RSpec.describe Build::Image do
"PACKAGECLOUD_REPO=download-package", "PACKAGECLOUD_REPO=download-package",
"RELEASE_PACKAGE=gitlab-ee", "RELEASE_PACKAGE=gitlab-ee",
"RELEASE_VERSION=12.121.12-ee.0", "RELEASE_VERSION=12.121.12-ee.0",
"DOWNLOAD_URL=https://gitlab.com/api/v4/projects/20699/jobs/999999/artifacts/pkg/ubuntu-jammy/gitlab-ee_12.121.12-ee.0_amd64.deb", "DOWNLOAD_URL_amd64=https://gitlab.com/api/v4/projects/20699/jobs/999999/artifacts/pkg/ubuntu-jammy/gitlab-ee_12.121.12-ee.0_amd64.deb",
"DOWNLOAD_URL_arm64=https://gitlab.com/api/v4/projects/20699/jobs/999999/artifacts/pkg/ubuntu-jammy_aarch64/gitlab-ee_12.121.12-ee.0_arm64.deb",
"CI_JOB_TOKEN=NOT-CI-JOB-TOKEN\n" "CI_JOB_TOKEN=NOT-CI-JOB-TOKEN\n"
].join("\n") ].join("\n")
end end