doc-locale/fr-fr/ci/docker/buildah_rootless_tutorial.md
{{< details >}}
{{< /details >}}
Ce tutoriel vous explique comment créer des images à l'aide de l'outil buildah, avec GitLab Runner déployé via GitLab Runner Operator sur un cluster OpenShift.
Ce guide est une adaptation de la documentation using Buildah to build images in a rootless OpenShift container pour GitLab Runner Operator.
Pour suivre ce tutoriel, vous devrez :
Assurez-vous de disposer des éléments suivants avant de commencer ce tutoriel :
gitlab-runner.Commencez par préparer une image personnalisée basée sur l'image quay.io/buildah/stable:v1.23.1.
Créez le fichier Containerfile-buildah :
cat > Containerfile-buildah <<EOF
FROM quay.io/buildah/stable:v1.23.1
RUN touch /etc/subgid /etc/subuid \
&& chmod g=u /etc/subgid /etc/subuid /etc/passwd \
&& echo build:10000:65536 > /etc/subuid \
&& echo build:10000:65536 > /etc/subgid
# Use chroot because the default runc does not work when running rootless
RUN echo "export BUILDAH_ISOLATION=chroot" >> /home/build/.bashrc
# Use VFS because fuse does not work
RUN mkdir -p /home/build/.config/containers \
&& (echo '[storage]';echo 'driver = "vfs"') > /home/build/.config/containers/storage.conf
# The buildah container will run as `build` user
USER build
WORKDIR /home/build
EOF
Créez et envoyez l'image Buildah vers un registre de conteneurs. Envoyons-la vers le registre de conteneurs GitLab :
docker build -f Containerfile-buildah -t registry.example.com/group/project/buildah:1.23.1 .
docker push registry.example.com/group/project/buildah:1.23.1
Pour ces étapes, vous devez exécuter les commandes dans un terminal connecté au cluster OpenShift.
Exécutez cette commande pour créer un compte de service nommé buildah-sa :
oc create -f - <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: buildah-sa
namespace: gitlab-runner
EOF
Accordez au compte de service créé la capacité de s'exécuter avec le SCC anyuid :
oc adm policy add-scc-to-user anyuid -z buildah-sa -n gitlab-runner
Utilisez un modèle de configuration de runner pour configurer Operator afin d'utiliser le nouveau compte de service. Créez un fichier custom-config.toml contenant :
[[runners]]
[runners.kubernetes]
service_account_overwrite_allowed = "buildah-*"
Créez un ConfigMap nommé custom-config-toml à partir du fichier custom-config.toml :
oc create configmap custom-config-toml --from-file config.toml=custom-config.toml -n gitlab-runner
Définissez la propriété config du Runner en mettant à jour son fichier Custom Resource Definition (CRD) :
apiVersion: apps.gitlab.com/v1beta2
kind: Runner
metadata:
name: buildah-runner
spec:
gitlabUrl: https://gitlab.example.com
token: gitlab-runner-secret
config: custom-config-toml
La dernière étape consiste à configurer un fichier de configuration GitLab CI/CD dans votre projet pour utiliser la nouvelle image Buildah et le compte de service configuré :
build:
stage: build
image: registry.example.com/group/project/buildah:1.23.1
variables:
STORAGE_DRIVER: vfs
BUILDAH_FORMAT: docker
BUILDAH_ISOLATION: chroot
FQ_IMAGE_NAME: "$CI_REGISTRY_IMAGE/test"
KUBERNETES_SERVICE_ACCOUNT_OVERWRITE: "buildah-sa"
before_script:
# Log in to the GitLab container registry
- buildah login -u "$CI_REGISTRY_USER" --password $CI_REGISTRY_PASSWORD $CI_REGISTRY
script:
- buildah images
- buildah build -t $FQ_IMAGE_NAME
- buildah images
- buildah push $FQ_IMAGE_NAME
Le job doit utiliser l'image que vous avez créée comme valeur du mot-clé image.
La variable KUBERNETES_SERVICE_ACCOUNT_OVERWRITE doit avoir pour valeur le nom du compte de service que vous avez créé.
Félicitations, vous avez créé avec succès une image avec Buildah dans un conteneur sans privilèges root !
Il existe un problème connu lors de l'exécution en tant que non-root. Vous devrez peut-être utiliser un contournement si vous utilisez un runner OpenShift.