Windows 上的 GitLab runner 正在处理 & %ERRORLEVEL%
GitLab runner on Windows and dealing with & %ERRORLEVEL%
在我的 .gitlab-ci.yml 中,我正在尝试使用 findstr 命令。
findstr /c:"%SOLUTION_DIR%" gitlab.dif > founded.ref
如果在 gitlab.dif 中没有匹配“%SOLUTION_DIR%”,此命令将 %ERRORLEVEL% 设置为 1。
GitLab runner 似乎将此解释为工作失败。
ERROR: Job failed: exit status 1
有什么解决办法吗?
编辑:
我的 .gitlab-ci.yml 文件
stages:
- check
- build
check_diff:
stage: check
script:
- git diff --name-only origin/develop...HEAD > _gitlab_diff.txt
- git diff --name-only HEAD~1 >> _gitlab_diff.txt
artifacts:
paths:
- _gitlab_diff.txt
only:
refs:
- merge_requests
- develop
.generic_build_job:
stage: build
dependencies:
- check_diff
before_script:
- findstr /c:"%SOLUTION_DIR%" "_gitlab_diff.txt" > _check_%SOLUTION_FILE%.txt
- for /f %%i in ("_check_%SOLUTION_FILE%.txt") do set size=%%~zi
- if %size% == 0 exit 0
- cd %SOLUTION_DIR%
script:
- '"%NUGET%" restore "%SOLUTION_FILE%"'
- '"%MSBUILD%" /consoleloggerparameters:ErrorsOnly /maxcpucount /nologo /property:Configuration=Release /verbosity:quiet "%SOLUTION_FILE%"'
only:
refs:
- merge_requests
- develop
MyApp1:
variables:
SOLUTION_DIR: "MyApp1/"
SOLUTION_FILE: "MyApp1.sln"
extends: .generic_build_job
only:
changes:
- MyApp1/*
MyApp2:
variables:
SOLUTION_DIR: "MyApp2/"
SOLUTION_FILE: "MyApp2.sln"
extends: .generic_build_job
only:
changes:
- MyApp2/*
我找到了使用批处理脚本的解决方法。
这是我的 skip.bat :
findstr /c:%1 %2 >nul 2>&1
if not %errorlevel% == 0 exit 0
你可以做到:
- findstr /c:%1 %2 >nul 2>&1 |出口(0)
你的工作再也不会因为这条命令而失败
在我的 .gitlab-ci.yml 中,我正在尝试使用 findstr 命令。
findstr /c:"%SOLUTION_DIR%" gitlab.dif > founded.ref
如果在 gitlab.dif 中没有匹配“%SOLUTION_DIR%”,此命令将 %ERRORLEVEL% 设置为 1。
GitLab runner 似乎将此解释为工作失败。
ERROR: Job failed: exit status 1
有什么解决办法吗?
编辑:
我的 .gitlab-ci.yml 文件
stages:
- check
- build
check_diff:
stage: check
script:
- git diff --name-only origin/develop...HEAD > _gitlab_diff.txt
- git diff --name-only HEAD~1 >> _gitlab_diff.txt
artifacts:
paths:
- _gitlab_diff.txt
only:
refs:
- merge_requests
- develop
.generic_build_job:
stage: build
dependencies:
- check_diff
before_script:
- findstr /c:"%SOLUTION_DIR%" "_gitlab_diff.txt" > _check_%SOLUTION_FILE%.txt
- for /f %%i in ("_check_%SOLUTION_FILE%.txt") do set size=%%~zi
- if %size% == 0 exit 0
- cd %SOLUTION_DIR%
script:
- '"%NUGET%" restore "%SOLUTION_FILE%"'
- '"%MSBUILD%" /consoleloggerparameters:ErrorsOnly /maxcpucount /nologo /property:Configuration=Release /verbosity:quiet "%SOLUTION_FILE%"'
only:
refs:
- merge_requests
- develop
MyApp1:
variables:
SOLUTION_DIR: "MyApp1/"
SOLUTION_FILE: "MyApp1.sln"
extends: .generic_build_job
only:
changes:
- MyApp1/*
MyApp2:
variables:
SOLUTION_DIR: "MyApp2/"
SOLUTION_FILE: "MyApp2.sln"
extends: .generic_build_job
only:
changes:
- MyApp2/*
我找到了使用批处理脚本的解决方法。
这是我的 skip.bat :
findstr /c:%1 %2 >nul 2>&1
if not %errorlevel% == 0 exit 0
你可以做到:
- findstr /c:%1 %2 >nul 2>&1 |出口(0)
你的工作再也不会因为这条命令而失败