> For the complete documentation index, see [llms.txt](https://wiki.wecoprod.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wiki.wecoprod.com/git/gitlab.md).

# Gitlab

## Documentation

* [Push de Gitlab vers un serveur distant](https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/)

## Du local à Gitlab

Pour pusher du code local sur Gitlab, il faut créer un repository sur la plateforme.&#x20;

1. Aller dans `Settings > CI / CD` et ajouter votre clé publique SSH dans `Deploy Keys`.

{% hint style="info" %}
Si vous avez déjà utilisé votre clé SSH locale dans un projet de votre Gitlab, allez la chercher dans l'onglet `Privately accessible deploy keys`.
{% endhint %}

{% hint style="info" %}
Il est possible que la clé n'ai pas les droits d'écriture sur le repository. Dans ce cas, éditer la clé dans Gitlab et cocher la case `Write access allowed`.
{% endhint %}

## De Gitlab au serveur

Pour mettre en place du code sur un serveur, il faut que Gitlab puisse accéder au serveur via SSH pour récupérer le code.

### Configuration

1. Aller dans le projet, puis `Settings > Repository > Deploy Keys`.
2. Sur le **serveur**, créer une nouvelle clé SSH : `ssh-keygen -o -t rsa -C "sebastien@wecoprod.com" -b 4096` (`id_rsa.pub`).
3. Ajouter le contenu du fichier `id_rsa.pub` dans le formulaire.

*Attention : si le serveur est déjà présent, il faut passer par la liste des clés SSH utilisées dans Gitlab.*

Il faut ensuite ajouter les variables pour le CI.

1. Aller dans `Settings > CI / CD > Variables`.
2. Sur le **serveur**, créer une nouvelle clé SSH (pour Gitlab) : `ssh-keygen -o -t rsa -C "sebastien+gitlab@wecoprod.com" -b 4096` . Utiliser `id_rsa_gitlab.pub` comme nom du fichier.
3. Ajouter la clé publique aux accès autorisés : `cat .ssh/id_rsa_gitlab.pub >> .ssh/instance_keys`.
4. Copier la clé privée dans la variable `SSH_PRIVATE_KEY`.

{% hint style="info" %}
J'utilise le fichier `instance_keys` pour stocker la clé publique de Gitlab car le fichier `autorized_keys` peut être écrasé au démarrage. C'est le cas dans les instances Scaleway…
{% endhint %}

Initialiser le repository GIT : `git init`

### Fichier de conf

Variables :

* `DEPLOYMENT_SERVER_IP` : IP du serveur distant
* `SSH_USER` : utilisateur SSH du serveur distant
* `SSH_PRIVATE_KEY` : clé privée du serveur distant

Copier la clé privée du serveur distant dans la variable .

```
# gitlab-ci.yml
image: node:8

services:
- docker:dind

stages:
- deploy

deploy_production:
	stage: deploy
	image: docker:git
	before_script:
		- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
		- mkdir -p ~/.ssh
		- eval $(ssh-agent -s)
		- '[[ -f /.dockerenv ]] && echo -e "Host *\\nStrictHostKeyChecking no\\n" > ~/.ssh/config'
		- echo -e "$SSH_PRIVATE_KEY" > key
		- chmod 600 key
		- ssh-add key
		- ssh-keyscan -H 'gitlab.com' >> ~/.ssh/known_hosts
	script:
		- ssh root@$DEPLOYMENT_SERVER_IP "touch ~/test_deploy_gitlab.txt"
		- ...
	only:
		- master
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.wecoprod.com/git/gitlab.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
