web-dev-qa-db-fra.com

Comment activer le clonage via SSH pour un runner Gitlab?

J'ai du mal à cloner de grands référentiels sur HTTP sur mon runner Windows Gitlab. J'ai essayé plusieurs méthodes pour faire des clones superficiels ou désactiver la compression des clones. Toujours pas de chance.

Le clonage du même référentiel sur SSH fonctionne très bien comme solution temporaire et j'aimerais que cela fonctionne sur notre processus Gitlab CI.

Le problème est maintenant là où je ne sais pas comment utiliser SSH comme méthode de clonage pour le gitlab-multi-runner. Il semble simplement utiliser HTTP par défaut, et mes seules options concernant le clonage sont de savoir s'il fera un clone complet ou une extraction.

CI/CD Display

Quelqu'un peut-il expliquer comment je pourrais faire fonctionner ce clone/fetch sur un coureur via SSH au lieu de HTTP?

Version Gitlab: GitLab Community Edition 8.10.7

Merci!

18

Selon:

https://docs.gitlab.com/ee/ci/ssh_keys/README.html

Tu dois:

  1. Créer une nouvelle paire de clés SSH avec ssh-keygen
  2. Ajouter la clé privée en tant que variable secrète au projet
  3. Exécutez l'agent ssh pendant le travail pour charger la clé privée.

Exemple gitlab_ci.yml:

before_script:
  # Install ssh-agent if not already installed, it is required by Docker.
  # (change apt-get to yum if you use a CentOS-based image)
  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'

  # Run ssh-agent (inside the build environment)
  - eval $(ssh-agent -s)

  # Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store
  - ssh-add <(echo "$SSH_PRIVATE_KEY")

  # For Docker builds disable Host key checking. Be aware that by adding that
  # you are suspectible to man-in-the-middle attacks.
  # WARNING: Use this only with the Docker executor, if you use it with Shell
  # you will overwrite your user's SSH config.
  - mkdir -p ~/.ssh
  - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
  # In order to properly check the server's Host key, assuming you created the
  # SSH_SERVER_HOSTKEYS variable previously, uncomment the following two lines
  # instead.
  # - mkdir -p ~/.ssh
  # - '[[ -f /.dockerenv ]] && echo "$SSH_SERVER_HOSTKEYS" > ~/.ssh/known_hosts'
4
Maciej Treder

En tant que nouveau venu sur gitlab, j'ai réussi à pirater une solution à ce problème car je n'ai pas non plus trouvé de moyen intégré de modifier le processus de clonage par défaut (bien que voici un commentaire récent sur la façon dont il peut être fait ).

En désactivant le processus de clonage automatique , vous pouvez effectivement remplacer complètement son comportement en écrivant simplement votre propre processus de clonage dans un before_script. Ce n'est qu'à des fins d'exemple que ce qui suit montre comment accomplir cela pour le clonage HTTP mais pourrait être adapté pour le clonage ssh ( si vous essayez d'utiliser le clonage HTTP, vous devez utiliser le processus de clonage et config.toml ):

  1. Créez un nouvel utilisateur appelé "gitlab-runner" et générez son jeton d'authentification d'utilisateur pour une utilisation ultérieure (ou dans votre cas, vous générerez des clés ssh).

  2. Désactivez le processus de clonage pour le runner en ajoutant la variable suivante dans les paramètres de votre projet ou de votre groupe: .../settings/ci_cd

    clé: GIT_STRATEGY

    valeur: aucune

  3. Clonez votre référentiel dans un before_script tel que:

 before_script: 
 ## nettoyer le répertoire de travail 
 - BUILD_DIR =/home/gitlab-runner/builds/$ RUNNER_TOKEN/0 
 - CLONE_DIR = "$ BUILD_DIR /$CI_PROJECT_PATH"
 - cd $ BUILD_DIR 
 - rm -rf $ CLONE_DIR 
 - mkdir -p $ CLONE_DIR 
 
 ## cloner le projet à chaque fois (inefficace, pensez plutôt à effectuer la récupération si elle existe déjà) 
 - git clone http: // gitlab-runner: $ GITLABRUNNER_USER_AUTH_TOKEN @ server: 8888/$ {CI_PROJECT_PATH} .git $ CLONE_DIR 
 - cd $ CLONE_DIR 

Remarque: Voici les variables pertinentes que j'ai également configurées à l'étape 2 plutôt que de les coder en dur dans le script:

  • RUNNER_TOKEN: "Runner Token" valeur répertoriée dans le menu Admin "Runners" pour le coureur particulier que vous essayez d'exécuter.
  • GITLABRUNNER_USER_AUTH_TOKEN: Il s'agit du jeton d'authentification que vous avez généré à l'étape 1.
4
ecoe