基本的に何かが欠けていると思います。私はCI/CDを初めて使い、gitlabで初めてパイプラインをセットアップしようとしています。
このプロジェクトは、既存のPHPプロジェクトです。
まだクリーンアップしたくないのですが、現時点ではすべてをドッカーコンテナーにプッシュし、ローカルおよびリモートのGoogleクラウドテストVMでGoogleクラウドのmysqlデータベースなどと正常に通信しています。夢は、開発ブランチにプッシュしてから、devブランチをテストブランチにマージしてから、自動テスト(簡単な部分)をトリガーし、リモートテストを引き起こすことですVM( Googleクラウドでホストされている)、最新の変更をプルし、最新のdockerファイルからイメージを再構築する(またはgitlabイメージレジスタから最新のイメージをプルする)...そして、最新のイメージでコンテナを再構築します。
私はgitlabのランナーで遊んでいますが、ほとんどすべてのオンラインコンテンツを調べているにもかかわらず、実際に何のためにあるのか理解していません。 googleクラウドVMにインストールするだけで、開発マシンからgitlabにプッシュすると、リポジトリは(VM上で実行されている)ランナーに「シグナル」を送り、一連のスクリプト(最新の変更をgit pull?)。
アプリを既にコンテナにローカルに事前パッケージ化(および画像を画像レジストリにプッシュ)しているので、ランナーのエグゼキューターとしてdockerを使用する必要がありますか?または、シェルとシェルを使用してコマンドを実行できますか?
私は何が欠けていますか?
TLDRおよび追加:
質問:
実際にランナーは何のためにインストールされていますか?
実行されているディレクトリを気にしますか?
実行するディレクトリを気にしない場合、スクリプトコマンドはどこで実行しますか?ルートで?
ローカルで独自の画像を構築してgitlabのレジストリにアップロードしている場合、
Executorをdockerに設定する必要がありますか?シェルに設定し、イメージを取得してビルドするだけではいけませんか? (ランナーがリモートVMで実行されていると仮定します)。
実際にランナーは何のためにありますか?
プロジェクトと.gitlab-ci.yml
ファイルがあります。 .gitlab-ci.yml
は、CI/CDパイプラインのステージと、各ステージで実行することを定義します。これは通常、ビルド、テスト、展開の各ステージで構成されます。各ステージ内で、複数のジョブを定義できます。たとえば、ビルドステージでは、debian、centos、windowsでビルドする3つのジョブがあります(GitLab用語集build:debian
、build:centos
、build:windows
)。 GitLabランナーは、gitlab-ci.yamlファイルを読み取ってプロジェクトのクローンを作成し、指示どおりに実行します。基本的に、GitLabランナーは、指示されたタスクを実行するGolang
プロセスです。
どこにインストールするつもりですか?
ここにリストされている希望の環境にランナーをインストールできます。 https://docs.gitlab.com/runner/install/ または、GitLabのインフラストラクチャに既にインストールされている共有ランナーを使用できます。
どのディレクトリで実行されるかを気にしますか?
はい。ランナーによって実行されるすべてのタスクは、 https://gitlab.com/help/ci/variables/README で定義されているCI_PROJECT_DIR
に相対的です。ただし、この動作は変更できます。
スクリプトコマンドはどこで実行されますか?ルートで?
Executorをdockerに設定する必要がありますか?シェルに設定し、イメージを取得してビルドするだけではいけませんか?
ランナーには、docker、Shell、virtualboxなどの複数のexecutorを含めることができますが、dockerが最も一般的なものです。ドッカーをエグゼキューターとして使用する場合、ドッカーハブまたは設定済みのレジストリから任意のイメージをプルでき、ドッカーイメージを使用してstffをロードできます。通常、Docker環境では、rootユーザーとして実行します。 https://docs.gitlab.com/runner/executors/README.html
Gitlabアクセスログを参照してください。ランナーは常にサーバーをポーリングしています