Add dynamic Helm 3.10 CI image for GitLab chart

This commit is contained in:
Clemens Beck 2024-05-07 10:48:03 +00:00 committed by Balasankar 'Balu' C
parent 0420021dad
commit b70bdd0493
10 changed files with 118 additions and 45 deletions

View file

@ -26,6 +26,7 @@ default:
stages:
- custom
- gitlab
- gitlab-chart
- gitlab-assets
- gitlab-review-app
- workhorse

View file

@ -1,9 +1,6 @@
danger:
extends: .build_static_image
gitlab-charts-build-base-helm-3.9:
extends: .build_static_image
gitlab-helm3.9-kubectl1.23:
extends: .build_static_image

View file

@ -0,0 +1,28 @@
# Used by GitLab chart CI (https://gitlab.com/gitlab-org/charts/gitlab)
.gitlab-chart:
extends:
- .build_dynamic_image
rules:
- !reference [.build_dynamic_image, rules]
- changes:
- "scripts/lib/custom-docker-build"
- "scripts/install-kubectl"
- "scripts/install-helm"
- "scripts/install-helm-kubeconform"
- "scripts/install-ruby"
- "scripts/install-vcluster"
- ".gitlab/ci/gitlab.helm.images.yml"
gitlab-chart:
extends:
- .gitlab-chart
stage: gitlab-chart
variables:
RUBY: '3.2'
HELM: '3.10'
HELM_KUBECONFORM: '0.1.17'
VCLUSTER: '0.19'
KUBECTL: '1.30'
AWSCLI: '1.32.93'
OS: 'debian:bookworm-slim'

View file

@ -112,12 +112,29 @@ ARG HELM_DOWNLOAD_SHA256
RUN if [ -n "$HELM_VERSION" ] ; then /scripts/install-helm "$HELM_VERSION" "$HELM_DOWNLOAD_SHA256"; fi
# Helm kubeconform
ARG HELM_KUBECONFORM_VERSION
RUN if [ -n "$HELM_VERSION" ] && [ -n "$HELM_KUBECONFORM_VERSION" ] ; then /scripts/install-helm-kubeconform "$HELM_KUBECONFORM_VERSION"; fi
# Kind
ARG KIND_VERSION
ARG KIND_DOWNLOAD_SHA256
RUN if [ -n "$KIND_VERSION" ] ; then /scripts/install-kind "$KIND_VERSION" "$KIND_DOWNLOAD_SHA256"; fi
# VCluster
ARG VCLUSTER_VERSION
ARG VCLUSTER_DOWNLOAD_SHA256
RUN if [ -n "$VCLUSTER_VERSION" ] ; then /scripts/install-vcluster "$VCLUSTER_VERSION" "$VCLUSTER_DOWNLOAD_SHA256"; fi
# AWS CLI
ARG AWSCLI_VERSION
RUN if [ -n "$AWSCLI_VERSION" ] ; then /scripts/install-awscli "$AWSCLI_VERSION" ; fi
RUN /scripts/generate-locale
ENV LANG=C.UTF-8 \
LANGUAGE=C \

View file

@ -1,41 +0,0 @@
FROM ruby:3.1-alpine
MAINTAINER GitLab Distribution Team
ENV HELM_VERSION=3.9.4
ENV HELM_URL=https://get.helm.sh/helm-v${HELM_VERSION}-linux-amd64.tar.gz
ENV HELM_HOME=/root/.helm
# kubectl (possibly in gcloud?)
ENV KUBECTL_VERSION=1.26.7
ENV KUBECTL_URL=https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl
ENV VCLUSTER_VERSION=0.16.3
ENV VCLUSTER_URL=https://github.com/loft-sh/vcluster/releases/download/v${VCLUSTER_VERSION}/vcluster-linux-amd64
# Install dependencies
RUN apk --no-cache add -U openssl curl tar gzip bash ca-certificates git python3 py3-pip groff gpg gpg-agent\
&& mkdir -p /opt
# Install kubectl
RUN curl -L -o /usr/local/bin/kubectl ${KUBECTL_URL} \
&& chmod +x /usr/local/bin/kubectl \
&& kubectl version --client
# Install Helm
RUN wget -q -O - ${HELM_URL} | tar zxf - \
&& mv linux-amd64/helm /usr/bin/ \
&& chmod +x /usr/bin/helm \
&& helm version --client
# Install kubeconform
ENV KUBECONFORM_HELM_VERSION=0.1.16
RUN mkdir -p $HELM_HOME/plugins && \
helm plugin install https://github.com/jtyr/kubeconform-helm --version ${KUBECONFORM_HELM_VERSION}
# Install aws cli
RUN pip3 install awscli
# Install vcluster
RUN curl -L -o /usr/local/bin/vcluster ${VCLUSTER_URL} \
&& chmod +x /usr/local/bin/vcluster \
&& vcluster version

12
scripts/install-awscli Executable file
View file

@ -0,0 +1,12 @@
#!/bin/bash
set -xeou pipefail
AWSCLI_VERSION=${1}
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get -y install python3 python3-pip
rm /usr/lib/python3.*/EXTERNALLY-MANAGED
pip install awscli==${AWSCLI_VERSION}

View file

@ -0,0 +1,7 @@
#!/bin/bash
set -xeou pipefail
KUBECONFORM_HELM_VERSION=${1}
helm plugin install https://github.com/jtyr/kubeconform-helm --version ${KUBECONFORM_HELM_VERSION}

13
scripts/install-vcluster Executable file
View file

@ -0,0 +1,13 @@
#!/bin/bash
set -xeou pipefail
VCLUSTER_VERSION=${1}
VCLUSTER_DOWNLOAD_SHA256=${2}
TARGETARCH=${TARGETARCH:-amd64}
VCLUSTER_DOWNLOAD_URL=https://github.com/loft-sh/vcluster/releases/download/v${VCLUSTER_VERSION}/vcluster-linux-${TARGETARCH}
/scripts/download-file vcluster "$VCLUSTER_DOWNLOAD_URL" "$VCLUSTER_DOWNLOAD_SHA256"
chmod +x vcluster
mv vcluster /usr/local/bin/vcluster

View file

@ -307,6 +307,11 @@ function print_kubectl_args() {
KUBECTL_DOWNLOAD_SHA256[amd64]=b6769d8ac6a0ed0f13b307d289dc092ad86180b08f5b5044af152808c04950ae
KUBECTL_DOWNLOAD_SHA256[arm64]=79b14e4ddada9e81d2989f36a89faa9e56f8abe6e0246e7bdc305c93c3731ea4
;;
1.30)
KUBECTL_VERSION=1.30.0
KUBECTL_DOWNLOAD_SHA256[amd64]=7c3807c0f5c1b30110a2ff1e55da1d112a6d0096201f1beb81b269f582b5d1c5
KUBECTL_DOWNLOAD_SHA256[arm64]=669af0cf520757298ea60a8b6eb6b719ba443a9c7d35f36d3fb2fd7513e8c7d2
;;
*) fail "Unknown kubectl version $1" ;;
esac
@ -323,6 +328,11 @@ function print_helm_args() {
HELM_DOWNLOAD_SHA256[amd64]=31960ff2f76a7379d9bac526ddf889fb79241191f1dbe2a24f7864ddcb3f6560
HELM_DOWNLOAD_SHA256[arm64]=d24163e466f7884c55079d1050968e80a05b633830047116cdfd8ae28d35b0c0
;;
3.10)
HELM_VERSION=3.10.3
HELM_DOWNLOAD_SHA256[amd64]=950439759ece902157cf915b209b8d694e6f675eaab5099fb7894f30eeaee9a2
HELM_DOWNLOAD_SHA256[arm64]=dca718eb68c72c51fc7157c4c2ebc8ce7ac79b95fc9355c5427ded99e913ec4c
;;
3.14)
HELM_VERSION=3.14.0
HELM_DOWNLOAD_SHA256[amd64]=f43e1c3387de24547506ab05d24e5309c0ce0b228c23bd8aa64e9ec4b8206651
@ -351,6 +361,32 @@ function print_kind_args() {
printf -- "--build-arg KIND_DOWNLOAD_SHA256=%q " "${KIND_DOWNLOAD_SHA256[*]}"
}
function print_vcluster_args() {
declare -A VCLUSTER_DOWNLOAD_SHA256
case "$1" in
0.19)
VCLUSTER_VERSION=0.19.4
VCLUSTER_DOWNLOAD_SHA256[amd64]=42e2b436c333d1b914525590d928160c56529b7351b88886322f1cca3b240f10
VCLUSTER_DOWNLOAD_SHA256[arm64]=2f138bbfb3a57a25e7635626a80b31d248d08507d6b021aaa1a40c274282ced7
;;
*) fail "Unknown vcluster version $1" ;;
esac
printf -- "--build-arg VCLUSTER_VERSION=%s " "$VCLUSTER_VERSION"
printf -- "--build-arg VCLUSTER_DOWNLOAD_SHA256=%q " "${VCLUSTER_DOWNLOAD_SHA256[*]}"
}
function print_helm_kubeconform_args() {
HELM_KUBECONFORM_VERSION="$1"
printf -- "--build-arg HELM_KUBECONFORM_VERSION=%s " "$HELM_KUBECONFORM_VERSION"
}
function print_awscli_args() {
AWSCLI_VERSION="$1"
printf -- "--build-arg AWSCLI_VERSION=%s " "$AWSCLI_VERSION"
}
function parse_arguments() {
printf -- "-f Dockerfile.custom "
@ -394,6 +430,9 @@ function parse_arguments() {
KUBECTL) print_kubectl_args $version ;;
HELM) print_helm_args $version ;;
KIND) print_kind_args $version ;;
VCLUSTER) print_vcluster_args $version ;;
AWSCLI) print_awscli_args $version ;;
HELM_KUBECONFORM) print_helm_kubeconform_args $version ;;
*) fail "Unknown tool $tool" ;;
esac
fi

View file

@ -2,7 +2,7 @@
# various variable operations used in this script.
PATH_TOOLS=(DEBIAN OS UBI RUBY GOLANG RUST NODE POSTGRESQL)
TAG_TOOLS=(BUNDLER RUBYGEMS GIT LFS CHROME YARN GRAPHICSMAGICK EXIFTOOL BAZELISK DOCKER GCLOUD KUBECTL HELM KIND)
TAG_TOOLS=(BUNDLER RUBYGEMS GIT LFS CHROME YARN GRAPHICSMAGICK EXIFTOOL BAZELISK DOCKER GCLOUD KUBECTL HELM HELM_KUBECONFORM KIND VCLUSTER AWSCLI)
# Generate the docker image path using the components that were specified via
# variables.