web-dev-qa-db-ja.com

Gitlab CIを使用してすべてのビルドをサーバーに展開します

1つのプロジェクトとGitlabランナーが構成された独自のGitlabサーバーをセットアップしました。私は継続的インテグレーションサーバーを初めて使用するため、以下を達成する方法がわかりません。

プロジェクトのマスターブランチにコミットするたびに、リポジトリを別のサーバーに展開し、そこで2つのシェルコマンドを実行したい(npm installand forever restartall

どうすればいいですか?プロジェクトがデプロイされているマシンにもランナーが必要ですか?

24
Hedge

Gitlab-ciとgitlab-runner [runners.ssh]を使用して、単一または複数のサーバーにデプロイできます。

流れ:

(git_project with yml file)  --> (gitlab && gitlab-ci) --> (gitlabrunner) ---runners.ssh---> (deployed_server,[deploye_server2])
  1. gitlab-ciにgitlab-runnerを登録し、gitlab webでタグをdelpoyServerに設定する必要があります。 /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は、ランナーが${the_destionation_of_deployServer_IP1}および${the_destionation_of_deployServer_IP2}にログインし、プロジェクトをbuilds_dirに複製することを意味します。

  1. たとえば、ymlファイルを記述します。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. gitlab-runnerを「 http://your.gitlab.server/ci/admin/runners 」のdelpoyServer1およびdelpoyServer2tagsに設定します

    • コードをgitlabにプッシュすると
    • gitlab-ciサーバーはプロジェクトの.gitlab-ci.ymlファイルを解析し、次のタグを持つランナーを選択します:deployServer1またはdeployServer2;
    • deployServer1タグを使用したgitlab-runnerは、sshを使用して${the_destionation_of_deployServer_IP1}および${the_destionation_of_deployServer_IP2}にログインし、プロジェクトをbuilds_dirにクローンし、スクリプトを実行します:npm install && forever restartall。

リンク:

30
michael

gitlab-ci.yml documentation を使用して、別個のbuildステージを.gitlab-ci.ymlファイルに追加できるはずです。

ある種のデプロイサービス(capistranoなど)、またはデプロイを開始するWebhookが必要です。

つまり何かのようなもの:

---
stages:
  - test
  - deploy

job_runtests:
  stage: test
  script:
    - npm test

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

Gitlab CIは、見つかった各ステージを反復処理し、順番に実行します。ステージが通過すると、次のステージに進みます。

残念ながら、Gitlab CIは直接デプロイできません(ただし、 dpl Ruby Gemをインストールし、.gitlab-ci.ymlファイルで呼び出すことはできますがそのようです:

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

例えば)

21
Alex