web-dev-qa-db-fra.com

Déployer chaque build sur un serveur à l'aide de Gitlab CI

J'ai installé mon propre serveur Gitlab avec un projet et un runner Gitlab configuré pour cela. Je suis nouveau sur le serveur d'intégration continue et je ne sais donc pas comment accomplir ce qui suit.

Chaque fois que je m'engage dans la branche principale de mon projet, je souhaite déployer le référentiel sur un autre serveur et y exécuter deux commandes Shell (npm installet forever restartall)

Comment pourrais-je faire ça? Ai-je besoin d'un runner sur la machine sur laquelle le projet est également déployé?

24
Hedge

Vous pouvez utiliser gitlab-ci et gitlab-runner [runners.ssh] pour déployer sur des serveurs simples ou multiples.

le flux:

(git_project with yml file)  --> (gitlab && gitlab-ci) --> (gitlabrunner) ---runners.ssh---> (deployed_server,[deploye_server2])
  1. vous devez enregistrer gitlab-runner sur gitlab-ci et définir la balise sur delpoyServer sur gitlab web. /etc/gitlab-runner/config.toml:

     [[runners]]
      url = "http://your.gitlab.server/ci"
      token = "1ba879596cf3ff778ee744e6decedd"
      name = "deployServer1"
      limit = 1
      executor = "ssh"
      builds_dir = "/data/git_build"
      [runners.ssh]
        user = "you_user_name"
        Host = "${the_destionation_of_deployServer_IP1}"
        port = "22"
        identity_file = "/home/you_user_name/.ssh/id_rsa"
    
    
    [[runners]]
      url = "http://your.gitlab.server/ci"
      token = "1ba879596cf3ff778ee744e6decedd"
      name = "deployServer2"
      limit = 1
      executor = "ssh"
      builds_dir = "/data/git_build"
      [runners.ssh]
        user = "you_user_name"
        Host = "${the_destionation_of_deployServer_IP2}"
        port = "22"
        identity_file = "/home/you_user_name/.ssh/id_rsa"
    

runner.ssh signifie que le coureur se connectera à ${the_destionation_of_deployServer_IP1} et ${the_destionation_of_deployServer_IP2}, puis clonez le projet dans builds_dir.

  1. écrivez le fichier yml par exemple: .gitlab-ci.yml

    job_deploy:
      stage: deploy
      tags: delpoyServer1
      script:
        -  npm install &&  forever restartall
    job_deploy:
      stage: deploy
      tags: delpoyServer2
      script:
        -  npm install &&  forever restartall
    
  2. définissez votre gitlab-runner sur delpoyServer1 et delpoyServer2tags dans ' http: //your.gitlab.server/ci/admin/runners '

    • quand vous poussez votre code vers gitlab
    • le serveur gitlab-ci analysera votre .gitlab-ci.yml fichier dans votre projet, choisissez un coureur avec les balises: deployServer1 ou deployServer2;
    • le gitlab-runneravec la balise deployServer1 se connectera à ${the_destionation_of_deployServer_IP1} et ${the_destionation_of_deployServer_IP2} avec ssh, clonez le projet dans builds_dir, puis exécutez votre script: npm install && forever restartall.

lien:

30
michael

Vous devriez pouvoir utiliser documentation gitlab-ci.yml pour ajouter une étape build distincte dans votre .gitlab-ci.yml fichier.

Vous aurez besoin d'une sorte de service de déploiement (comme capistrano ou similaire), ou d'un webhook qui lancera un déploiement.

C'est à dire. quelque chose comme:

---
stages:
  - test
  - deploy

job_runtests:
  stage: test
  script:
    - npm test

job_deploy:
  stage: deploy
  script:
    - curl -X POST https://deploymentservice.io/?key=

Gitlab CI parcourt chaque étape qu'il trouve et les exécute séquentiellement. Si une étape passe, elle passe à la suivante.

Malheureusement, Gitlab CI ne peut pas faire de déploiement directement (bien que vous puissiez installer le dpl Ruby Gem et l'appeler dans votre .gitlab-ci.yml fichier comme ceci:

job_deploy:
  - gem install dpl
  - dpl --provider=heroku --app=my-app-staging --api-key=$HEROKU_STAGING_API_KEY
only:
  - master

par exemple)

21
Alex