shibe drill. 別館

日記代わりになんとなく書く方

GitLab CI/CDでDelphiのプロジェクトに自動ビルドを追加しようとした

やりたかったこと

GitLab リポジトリのCI/CD機能を使って、プッシュされるたびにビルドする環境を作りたかった

環境

クライアント&ビルド側

サーバー側

  • Ubuntu Server 24.04 LTS
  • GitLab v17.1.0-ee

準備したもの

リポジトリ

  • .gitlab-ci.yml
    後述するパイプラインエディタで勝手に作成されます。
  • build.bat
    コンパイルを実際に行うbat。中身はこんな感じです。
rem 初期パラメータ(Rad Studio コマンドプロンプトを使用しない場合に必要)
@SET BDS=C:\Program Files (x86)\Embarcadero\Studio\22.0
@SET BDSINCLUDE=C:\Program Files (x86)\Embarcadero\Studio\22.0\include
@SET BDSCOMMONDIR=C:\Users\Public\Documents\Embarcadero\Studio\22.0
@SET FrameworkDir=C:\Windows\Microsoft.NET\Framework\v4.0.30319
@SET FrameworkVersion=v4.5
@SET FrameworkSDKDir=
@SET PATH=%FrameworkDir%;%FrameworkSDKDir%;C:\Program Files (x86)\Embarcadero\Studio\22.0\bin;C:\Program Files (x86)\Embarcadero\Studio\22.0\bin64;C:\Program Files (x86)\Embarcadero\Studio\22.0\cmake;%PATH%
@SET LANGDIR=JA
@SET PLATFORM=
@SET PlatformSDK=

rem ビルド
msbuild (プロジェクト名).dproj /t:Build /p:config=Release /p:platform=Win64

コンパイルを行うPC側

  • GitLab Runner

公式リンク
日本語訳サイト
インストール手順に従ってダウンロードします。
解凍してフォルダに配置するまでにしておきます。まだgitlab-runner installは実行しないでください。

ちなみにインストール環境はサーバーでなくても問題ないですが、
常にプッシュ→ビルドを実施したい場合はRunnerを常に実行している必要があります。

じゃあ構築してみましょう

パイプラインエディタを作成する

リポジトリを開き、左のメニューから[ビルド] - [パイプラインエディタ]を開きます。

[パイプラインの構成] をクリックすると、自動的にbuild-test-deployの.gitlab-ci.ymlが作成されます。
build-jobのscript記載部分に- ./build.batを追加します。

[変更をコミットする] でとりあえずbuildができる.gitlab-ci.ymlが出来上がります。簡単!

GitLab側でRunnerを登録する

[設定] - [CI/CD]を選択し、[Runner]を展開しましょう。

[新規プロジェクトRunner]をクリックし、Runnerを登録します。
今回はとりあえず動けばいいので、Tagsは「タグのないジョブの実行」を選択、
設定は特に何も行わず[ランナーの作成]をクリックしました。

そうすると、tokenが発行されるのと同時にregisterのコマンドを例示してくれます。

この部分のコマンドをコピーして保持しておいてください。

コンパイル環境でRunnerを稼働する

gitlab-runner.exeを置いた環境でコマンドプロンプト(ターミナル/PowerShellでも可)を立ち上げます。

Windows11ならこんな感じでターミナルを立ち上げられます。
立ち上げたら先ほどのコマンドをコピペして、若干の必要事項を入力します。

- Enter the GitLab instance URL:
コマンド内で指定されてるのでそのまま空白でエンター。
- Enter a name for the runner
Runnerの名前です。適当に指定してください。
- Enter an executor
今回はshellと入力してください。

するとgitlab-runner.exeと同じフォルダにconfig.tomlなるファイルが生成されます。
この中身を少しいじります。

~
shell = "pwsh"
~

って感じに記載されているので、ここを

~
shell = "powershell"
~

に修正して保存します。

これでおおまかな設定は完了です。gitlab-runner.exe runなりgitlab-runner.exe start
Runnerを稼働させてください。

動作を確認する

GitLab リポジトリ側の[ビルド] - [ジョブ]を選択してください。
コードをプッシュするたびにジョブが実行され、buildが走る状態となります。

めでたしめでたし…かと思いきや

この手順で一通りRunnerを稼働し、自動ビルド環境が構築できました。ヤッター!!
と喜んだのも束の間、待てど暮らせどDelphiプロジェクトフォルダ側に
コンパイルしたexeが生成されません。
build自体は成功してるのになぁ…と実行結果を確認してみると、気になる文字列が。

This version of the product does not support command line compiling.

…いや、別にDelphi11.3だからってコマンドラインコンパイルが出来ないってことはないのでは…
と、思いつつも検索してみるとこんな記事に当たりました。

Delphi CE 10.4.2 - Command Line Compilation
要約:
Delphi Community Editionを再インストールしたらコマンドラインコンパイルが通らないねん!
前はできたのに!
Delphi CE 10.4.2のリリース記事にこんなコメントがあったで

Yes, the Community Edition no longer includes the command-line compilers.
Those are only available in the paid versions.
You would need to follow the manual installation instructions provided.

どうやら10.3から10.4に上がる際に、
Community Editionではコマンドラインコンパイラが削除されたみたいです。

さて、ここでわたしの環境を参照してみましょう。もうおわかりですね。

/(^o^)\

自動ビルドを追加できなかったお話

最後の最後に、まさかのCommunity Editionだからという理由で
自動ビルド環境を組めなかったお話でした。そりゃあないよ!!!

ちなみに有料版では稼働することを確認済みですので、
Professional版以上の方々はぜひこの手順で構築を試してみてください。