2

Gitlab リポジトリから本番サーバーで実行されているライブ Web サイトに新しい作業を自動的にデプロイしたいと考えています。liveライブ Web サイトは、ブランチの GIT リポジトリ クローンです。

私の質問:

  • 「ビルド」が発生するたびに、ランナーは私のレポを新たにクローンするように見え~/builds/...ます. これは必須の動作ですか?私が本当に欲しいと思うのはgit pull、実稼働 Web サイトのディレクトリ内だけです。

  • 本当に毎回レポをクローンしなければならないのなら、なぜそうしないのgit resetですか? 少なくとも、時間の経過とともに帯域幅を大幅に節約できますよね?

  • deploy.shリポジトリのルートにあるmy which を実行するにはどうすればよいですか? 現在、gitlab.com のビルド情報で次のエラーが表示されます。bash: line 23: deploy.sh: command not found

私の.gitlab-ci.ymlファイル:

deploy_to_production:
  script:
    - deploy.sh
  only:
    - live
  tags:
    - prod

詳細

deploy.shこれを行うには、レポの特定のブランチ (私の場合はブランチ) にプッシュするたびに、私が書いた単純なシェル スクリプト ( ) を本番サーバーで実行したいと考えていますlive。このシェル スクリプトは、私の.gitlab-ci.yml.

スクリプトは基本的にgit reset, fetchandpullを実行するだけで、本番バージョンをリポジトリの内容に合わせて最新の状態にします。

サーバーに「シェル」マルチランナーをインストールし、それを gitlab.com に接続しました。そこでアクティブになっていることがわかります。

全体として、私は間違ったツリーを吠えていますか? deploy.sh新しい作業の git チェックアウトを行わないように変更する必要がありますが、新しいコードを使用するcpか、おそらく新しいコードを本番 Web サイトrsyncに移動する必要がありますか?~/builds/...

4

1 に答える 1

4

Q: クローン作成は必須の動作ですか?

私の知る限りでは、ビルド プロセス中にコードを操作することが想定されているためです。

それがあなたのケースではなく、レポからコードをプルするように「本番サーバーに指示」したいだけの場合は、別のアプローチを取り、代わりにWebhookを使用できます。GitLab はサーバーに HTTP リクエストを送信し、イベント (プッシュ、マージなど) に関する情報を JSON 形式で渡します。受信スクリプトはそれを解析し、git pull を実行するかどうかを決定します。

展開前のビルド プロセス中にコードに対して実行する他のタスクがある場合は、はい、戦略を変更し、ランナーが既にチェックアウトしたコードを使用します。おそらく、何らかの方法で変更をアトミックにしようとします(ライブ ディレクトリに rsync すると、実行時にアプリケーションが不確実な状態になり、何らかの理由で失敗した場合は混乱します)。たとえば、ライブ コードをシンボリックリンクされたディレクトリ。次に、デプロイ スクリプトは新しいコード ディレクトリを最終的な宛先にコピーし、必要な調整を行い、シンボリック リンクのターゲットを古いライブ ディレクトリから新しいディレクトリに変更します。

Q: 本当に毎回レポをクローンする必要があるのに、git reset しないのはなぜですか?

それは開発者にとってより重要な問題です。他の誰かの答えは単なる憶測です。

Q: リポジトリのルートにある deploy.sh を実行するにはどうすればよいですか?

deploy.shスクリプトに実行可能ビットが設定されている場合はを使用し、それ以外の場合は を使用./deploy.shしますbash deploy.sh

于 2016-05-16T09:31:31.870 に答える