Comment activer le clonage sur SSH pour un Gitlab runner?

j'ai de la difficulté à cloner de grands dépôts sur HTTP sur mon Windows Gitlab runner. J'ai essayé plusieurs méthodes pour faire des clones superficiels ou désactiver la compression des clones. Toujours pas de chance.

cloner le même dépôt sur SSH fonctionne très bien comme solution temporaire et j'aimerais que cela fonctionne sur notre processus Gitlab CI.

la question est maintenant là où je n'ai aucune idée de comment utiliser SSH comme méthode de clone pour le gitlab-multi-runner. Il semble juste D'utiliser HTTP comme un défaut, et mes seules options concernant le clonage est de savoir si il va faire un clone ou une extraction.

CI/CD Display

Quelqu'un peut-il expliquer comment j'ai pu faire travailler ce clone/fetch sur un runner sur SSH au lieu de HTTP?

Gitlab Version: GitLab Community Edition 8.10.7

Merci!

12
demandé sur Steven van der Merwe 2016-08-29 17:13:28

2 réponses

Fonction:

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

Vous avez besoin de:

  1. créer une nouvelle paire de clés SSH avec ssh-keygen
  2. ajouter la clé privée comme Variable secrète au projet
  3. exécutez le ssh-agent 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'
2
répondu Maciej Treder 2017-05-07 13:05:55

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

Par désactiver le processus de Clonage automatique, vous pouvez effectivement annuler complètement son comportement en écrivant simplement votre propre processus de clonage dans un before_script. Uniquement pour les fins de l'exemple ne le ci-dessous montrent comment accomplir ceci pour le clonage HTTP mais pourrait être adapté pour ssh clonage (si vous essayez D'utiliser le clonage HTTP, vous devez utiliser le processus de Clonage intégré et la configuration.toml):

  1. créer un nouvel utilisateur appelé "gitlab-runner" et générer son token d'auth utilisateur pour une utilisation ultérieure (ou dans votre cas, vous produiriez des clés ssh).

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

    key: GIT_STRATEGY

    valeur: none

  3. clonez votre repo dans un before_script comme:

before_script:
  ## clean the working directory
  - 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

  ## clone the project each time (inefficient, consider performing fetch instead if it already exists)
  - git clone http://gitlab-runner:$GITLABRUNNER_USER_AUTH_TOKEN@server:8888/${CI_PROJECT_PATH}.git $CLONE_DIR
  - cd $CLONE_DIR

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

  • RUNNER_TOKEN: valeur " Runner Token "listée dans le menu administrateur" Runners " pour le runner particulier que vous essayez de lancer.
  • GITLABRUNNER_USER_AUTH_TOKEN: C'est le auth jeton que vous avez généré à l'étape 1.

aussi, j'ai ouvert un numéro dans gitlab pour extension de la configuration du procédé de Clonage runner.

1
répondu ecoe 2018-02-16 14:56:19