GitLab runner для Windows и работа с &%ERRORLEVEL%

В моем .gitlab-ci.yml я пытаюсь использовать команду findstr.

findstr /c:"%SOLUTION_DIR%" gitlab.dif > founded.ref

Эта команда устанавливает %ERRORLEVEL% в 1, если она не соответствует «%SOLUTION_DIR%» в gitlab.dif.

Похоже, 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/*

person jBravo    schedule 11.03.2019    source источник
comment
Обходной путь будет легче достичь, если вы предоставите контекст для одной командной строки. Пожалуйста, расширьте код и тело вопроса, если вы хотите дать нам шанс помочь вам с вашей проблемой.   -  person Compo    schedule 11.03.2019
comment
@Compo Моя цель — проверить различия в монорепозитории с ветвями функций: stackoverflow.com/questions/55067521/.   -  person jBravo    schedule 11.03.2019
comment
Пожалуйста, публикуйте только тот код, который вам нужен, чтобы мы помогли вам исправить, а не код, который вы не написали, или что-то на другом языке сценариев, который вы хотели бы преобразовать в другой бесплатно. То, что вы опубликовали, не является синтаксисом пакетного файла Windows; ваш вопрос касался команды командного файла/cmd.exe, содержащей findstr. Этот сайт не является бесплатной службой конвертации, поэтому я удалил ваш недействительный код, пройдите тур и прочитайте Как спросить еще раз, чтобы освежить ваше понимание того, как работает этот сайт.   -  person Compo    schedule 11.03.2019
comment
@Compo Вот почему я не просил помощи в части преобразования. Я просто попытался добавить контекст, как вы меня просили.   -  person jBravo    schedule 11.03.2019
comment
Рассматривали ли вы замену этих четырех строк кода пакетного файла на Find /I "%SOLUTION_DIR%" < "_gitlab_diff.txt" && CD /D "%SOLUTION_DIR%"   -  person Compo    schedule 11.03.2019
comment
Проблема здесь в том, что gitlab runner останавливается при первой обнаруженной ошибке (строка не найдена в файле). Как я могу обойти это поведение?   -  person jBravo    schedule 12.03.2019


Ответы (2)


Я нашел обходной путь, используя пакетный скрипт.

Вот мой skip.bat:

findstr /c:%1 %2 >nul 2>&1
if not %errorlevel% == 0 exit 0
person jBravo    schedule 12.03.2019

ты можешь сделать :

  • findstr /c:%1 %2 >nul 2>&1 | выход(0)

Ваша работа никогда больше не подведет из-за этой команды

person lampada    schedule 14.05.2020