web-dev-qa-db-ja.com

Gitlab CI Shellランナーでビルドを失敗させる方法

Windows 10でGitlab CIランナーを実行しています:

before_script:
  - "echo off"
  - 'call "%VS120COMNTOOLS%\vsvars32.bat"'
  - echo.
  - set
  - echo.

stages:
  - build

build:
  stage: build
  script:
  - 'StatusTest.exe'
  #- msbuild...

StatusText.exeでビルドを失敗させようとしています(ステータスコード-1、0、1を返そうとしました。例外をスローするなど)。しかし、Runnerは例外をログに記録し、次の手順を続行します。

CI Shellランナーがビルドに失敗し、次のステップに進まないことを決定するものは何ですか?

出力:

...
windows_tracing_logfile=C:\BVTBin\Tests\installpackage\csilogfile.log
$ echo.

$ StatusTest.exe

Unhandled Exception: System.Exception: tralala
   at StatusTest.Program.Main(String[] args)
$ echo "Restoring NuGet Packages..."
...
16
Vojtech B

CI Shellランナーがビルドに失敗し、次のステップに進まないことを決定するものは何ですか?

1)いつ失敗するか

gitlab-ci.ymlにこの行を追加する必要があります

- # ....
- exit 1

ステージ実行結果は失敗するはずで、次のステップには進みません。

enter image description here

そして、あなたのステージ(私の場合は3番目のステージ)を見ると、結果は失敗します:

enter image description here

2)いつ成功するか

gitlab-ci.ymlにこの行を追加する必要があります

- # ....
- exit 0

ステージの実行結果は次のようになります。

enter image description here

そして、ステージ(私の場合は3番目のステージ)を見ると、結果はOkになり、次のステージに進む準備ができています。

enter image description here

31

_StatusTest.exe_は、ステータスコードとしてシグナル1,0、-1を返す必要があります。アプリケーションに実装する必要があります。そうしないと、アプリケーションが失敗してもランナーは通知しません。ほとんどすべてのプログラミング言語には、ステータスコードを返す方法があります。

C#

Java

System.exit(exitCode) # exitCode = 1 or 0 or -1

[...] 等々。

例外をスローせずに、ステータスコードを返すようにしてください。

2
Rubinum