Si un projet GitLab est configuré sur GitLab CI, existe-t-il un moyen d'exécuter la construction localement?
Je ne veux pas transformer mon ordinateur portable en un "coureur", je veux simplement profiter de Docker et de .gitlab-ci.yml
pour exécuter des tests localement (c’est-à-dire que tout est préconfiguré). Un autre avantage est que je suis sûr d’utiliser le même environnement localement et sur CI.
Voici un exemple de comment exécuter des constructions Travis en utilisant Docker , je recherche quelque chose de similaire avec GitLab.
Depuis quelques mois, ceci est possible avec le gitlab-runner
:
gitlab-runner exec docker my-job-name
Notez que vous avez besoin à la fois de menu fixe et de gitlab-runner
installé sur votre ordinateur pour que cela fonctionne.
Vous aurez également besoin de la clé image
définie dans votre .gitlab-ci.yml
fichier. Sinon, ça ne marchera pas.
Voici la ligne que j'utilise actuellement pour tester localement en utilisant gitlab-runner
:
gitlab-runner exec docker test --docker-volumes "/home/elboletaire/.ssh/id_rsa:/root/.ssh/id_rsa:ro"
Edit: Vous pouvez éviter d'ajouter un
--docker-volumes
avec votre clé en le réglant par défaut dans/etc/gitlab-runner/config.toml
. Voir la documentation officielle pour plus de détails .
En raison de la confusion dans les commentaires, je colle ici le gitlab-runner --help
résultat, vous pouvez donc voir que gitlab-runner peut créer localement des compilations:
gitlab-runner --help
NAME:
gitlab-runner - a GitLab Runner
USAGE:
gitlab-runner [global options] command [command options] [arguments...]
VERSION:
1.1.0~beta.135.g24365ee (24365ee)
AUTHOR(S):
Kamil Trzciński <[email protected]>
COMMANDS:
exec execute a build locally
list List all configured runners
run run multi runner service
register register a new runner
install install service
uninstall uninstall service
start start service
stop stop service
restart restart service
status get status of a service
run-single start single runner
unregister unregister specific runner
verify verify all registered runners
artifacts-downloader download and extract build artifacts (internal)
artifacts-uploader create and upload build artifacts (internal)
cache-archiver create and upload cache artifacts (internal)
cache-extractor download and extract cache artifacts (internal)
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--debug debug mode [$DEBUG]
--log-level, -l "info" Log level (options: debug, info, warn, error, fatal, panic)
--cpuprofile write cpu profile to file [$CPU_PROFILE]
--help, -h show help
--version, -v print the version
Comme vous pouvez le constater, la commande exec
consiste à execute a build locally
.
Notez que ce processus consiste à utiliser votre propre machine pour exécuter les tests à l'aide de conteneurs Docker. Ceci n'est pas pour définir des coureurs personnalisés. Pour ce faire, accédez simplement aux paramètres CI/CD de votre référentiel et lisez-y la documentation. Si vous voulez vous assurer que votre coureur est exécuté au lieu d'un de gitlab.com, ajoutez une balise personnalisée et unique à votre coureur, assurez-vous qu'il n'exécute que les tâches étiquetées et marquez toutes les tâches dont vous souhaitez que votre coureur soit responsable.
Si vous utilisez Gitlab en utilisant l'image du menu fixe ici: https://hub.docker.com/r/gitlab/gitlab-ce , il est possible d'exécuter des pipelines en exposant le docker.sock
avec une option de volume: -v /var/run/docker.sock:/var/run/docker.sock
. L'ajout de cette option au conteneur Gitlab permettra à vos travailleurs d'accéder à l'instance de menu fixe sur l'hôte.
Le coureur GitLab semble ne pas encore fonctionner sous Windows et il y a n problème en suspens pour résoudre ce problème .
Donc, entre temps, je déplace mon code de script vers un script bash, que je peux facilement mapper sur un conteneur Docker exécuté localement et exécuté.
Dans ce cas, je souhaite créer un conteneur Docker dans mon travail. Je crée donc un script 'build':
#!/bin/bash
docker build --pull -t myimage:myversion .
dans mon fichier .gitlab-ci.yaml, j'exécute le script:
image: docker:latest
services:
- docker:dind
before_script:
- apk add bash
build:
stage: build
script:
- chmod 755 build
- build
Pour exécuter le script localement à l'aide de powershell, je peux démarrer l'image requise et mapper le volume avec les fichiers source:
$containerId = docker run --privileged -d -v ${PWD}:/src docker:dind
installer bash si non présent:
docker exec $containerId apk add bash
Définissez les autorisations sur le script bash:
docker exec -it $containerId chmod 755 /src/build
Exécutez le script:
docker exec -it --workdir /src $containerId bash -c 'build'
Puis arrêtez le conteneur:
docker stop $containerId
Et enfin nettoyer le conteneur:
docker container rm $containerId