web-dev-qa-db-fra.com

Utilisez GitLab CI pour exécuter des tests localement?

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.

51
Matthieu Napoli

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.

55
elboletaire

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.

2
Pierco

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
0
Glen Thomas