# #shell #gitlab #continuous-integration #yaml #gitlab-ci
Вопрос:
Приведем этот пример конфигурации конвейера .Net CI для Gitlab
image: mcr.microsoft.com/dotnet/sdk:5.0
stages:
- build
build:
stage: build
script:
- |
BUILD_WARNINGS_LOG_FILE="buildWarnings.log";
dotnet build -consoleloggerparameters:"Summary;Verbosity=normal" -m -p:"WarnLevel=5;EnforceCodeStyleInBuild=true" -t:"clean,build" -fl1 "/flp1:logFile=$BUILD_WARNINGS_LOG_FILE;warningsonly";
if [ $? -eq 0 ] amp;amp; [ $(wc -l < $BUILD_WARNINGS_LOG_FILE) -gt 0 ]
then
# do stuff here
fi
Конвейер завершается сбоем из-за недопустимого синтаксиса. Это происходит потому, что он не знает, что существует несколько команд оболочки для выполнения.
Этот .sh
файл работает на моем локальном компьютере
#!/bin/bash
BUILD_WARNINGS_LOG_FILE="buildWarnings.log";
dotnet build --output build -consoleloggerparameters:"Summary;Verbosity=normal" -m -p:"WarnLevel=5;EnforceCodeStyleInBuild=true" -t:"clean,build" -fl1 "/flp1:logFile=$BUILD_WARNINGS_LOG_FILE;warningsonly";
if [ $? -eq 0 ] amp;amp; [ $(wc -l < $BUILD_WARNINGS_LOG_FILE) -gt 0 ]
then
# do stuff here
fi
итак, как я могу правильно встроить его в этап ci Gitlab?
Ответ №1:
Есть три способа сделать это:
- Добавьте свой сценарий оболочки в изображение, чтобы вы могли его выполнить: (в вашем случае для этого потребуется создать новое изображение на основе
mcr.microsoft.com/dotnet/sdk:5.0
)
image: mcr.microsoft.com/dotnet/sdk:5.0
stages:
- build
build:
stage: build
script:
- bash /path/to/your/script.sh
- Создайте сценарий оболочки во время выполнения (просто скопируйте сценарий в файл оболочки и сделайте его исполняемым).
image: mcr.microsoft.com/dotnet/sdk:5.0
stages:
- build
build:
stage: build
script:
- echo "BUILD_WARNINGS_LOG_FILE="buildWarnings.log";ndotnet buildn-consoleloggerparameters:"Summary;Verbosity=normal" -m -p:"WarnLevel=5;EnforceCodeStyleInBuild=true" -t:"clean,build" -fl1 "/flp1:logFile=$BUILD_WARNINGS_LOG_FILE;warningsonly";nif [ $? -eq 0 ] amp;amp; [ $(wc -l < $BUILD_WARNINGS_LOG_FILE) -gt 0 ]nthennfi" > my-bash.sh
- chmod X my-bash.sh
- bash ./my-bash.sh
- Используйте правильный синтаксис команды multi-bash. (обратите внимание на черточку после трубы)
image: mcr.microsoft.com/dotnet/sdk:5.0
stages:
- build
build:
stage: build
script:
- |-
BUILD_WARNINGS_LOG_FILE="buildWarnings.log";
dotnet build -consoleloggerparameters:"Summary;Verbosity=normal" -m -p:"WarnLevel=5;EnforceCodeStyleInBuild=true" -t:"clean,build" -fl1 "/flp1:logFile=$BUILD_WARNINGS_LOG_FILE;warningsonly";
if [ $? -eq 0 ] amp;amp; [ $(wc -l < $BUILD_WARNINGS_LOG_FILE) -gt 0 ]
then
# do stuff here
fi
Комментарии:
1. Я предпочитаю третье решение. К сожалению, это не работает, потому что Gitlab считает, что сценарий является сценарием Powershell … по крайней мере, я вижу это в журналах ошибок
In C:WindowsTEMPbuild_script975465063script.ps1
, но я попытаюсь преобразовать его в сценарий PS и попробовать