Gitlab с SQL Server в качестве обработки конфигурации источника базы данных

#sql-server #docker #gitlab #configuration-files

#sql-сервер #docker #gitlab #конфигурация-файлы

Вопрос:

У меня есть собственный gitlab на компьютере Ubuntu. Я настраиваю контейнер Linux для его запуска runner . Теперь я пытаюсь написать конфигурацию для моего проекта dotnet для запуска модульного тестирования в этой настройке.

Я получаю конфигурацию для запуска приложения dotnet без базы данных, и единственная часть, в которой я застрял, заключается в том, что я не могу заставить базу данных загружаться или подключаться через мою тестовую среду.

Я запускаю контейнер SQL Server Linux как службу (я предполагаю, что он запущен). Но я не уверен, как я могу загрузить в него свою базу данных. Я знаю, что могу сделать это с помощью Docker Run . Но я не могу понять, как запустить это здесь.

Когда я пытаюсь запустить «mssql-tools» в качестве сервиса, я не могу получить его команду для запуска, поскольку он не установлен по умолчанию в dotnet image.

Вот мой файл.

изображение: microsoft / dotnet: последняя версия

переменные: ACCEPT_EULA: Y SA_PASSWORD: my_secure_password MSSQL_PID: разработчик

этапы:
— тестирование

before_script:
— «cd Source»
— «восстановление dotnet»

тест:
этап: тестовые
сервисы:
— mcr.microsoft.com/mssql/server:2017-latest
— mcr.microsoft.com/mssql-tools
скрипт:
— «cd ../ Database»
— «запуск docker -it mcr.microsoft.com/mssql-tools «
— «sqlcmd -S . -U SA -P my_secure_password -i testdata_structure.sql» — «выход»
— «cd .. / Source»
— «сборка dotnet»
— «тест dotnet»

"sqlcmd -S . -U SA -P my_secure_password -i testdata_structure.sql эта команда не будет работать в этой настройке, поскольку sqlcmd не установлен, но является одним из сервисов. Я не хочу создавать новый образ, в котором все предварительно установлено. Но используйте доступные материалы для работы.

Не уверен, смогу ли я объяснить свою проблему и знания здесь. Я новичок, но я читаю и меняю конфигурацию с 2 дней. Я могу запустить SQL Server на базе Linux с моим приложением с помощью локальных команд docker и прочего, но на Gitlab для запуска модульного теста я не могу восстановить / запустить базу данных и подключиться к приложению.

Ответ №1:

Службы GitLab не устанавливают команды или приложения внутри вашего задания контейнера, вместо этого служба представляет собой другой контейнер, который обычно запускается параллельно для предоставления инфраструктурных услуг, таких как базы данных, кэш, очереди и т.д.

если вы хотите иметь sqlcmd внутри вашего контейнера, вы должны установить его:

Это выдержка из моего конвейера, в данном случае мой контейнер основан на Alpine, но вы можете найти больше способов здесь: https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15

  before_script: 
- apk add curl 
- apk add --no-cache gnupg
- curl -O https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.7.2.1-1_amd64.sig
- curl -O https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/mssql-tools_17.7.1.1-1_amd64.sig
- curl -O https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.7.2.1-1_amd64.apk
- curl -O https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/mssql-tools_17.7.1.1-1_amd64.apk
- curl https://packages.microsoft.com/keys/microsoft.asc  | gpg --import -
- gpg --verify msodbcsql17_17.7.2.1-1_amd64.sig msodbcsql17_17.7.2.1-1_amd64.apk
- gpg --verify mssql-tools_17.7.1.1-1_amd64.sig mssql-tools_17.7.1.1-1_amd64.apk
- apk add --allow-untrusted msodbcsql17_17.7.2.1-1_amd64.apk
- apk add --allow-untrusted mssql-tools_17.7.1.1-1_amd64.apk

script: 
- /opt/mssql-tools/bin/sqlcmd -S $DBC_SERVER -U $DBC_USER -P $DBC_PASSWORD -q "USE myTestDb; CREATE TABLE testGitlab (id int); SELECT * FROM testGitLab"
  

Комментарии:

1. Я должен поблагодарить вас, что по прошествии 2 лет хотя бы кто-то пытается ответить на этот вопрос 🙂 .. Docker никогда не давался мне легко, и я уже изучил его 2 месяца назад, но все еще не понял, ваш скрипт, несомненно, поможет мне продвигаться вперед с этим.

Ответ №2:

В конечном итоге я использую свой пользовательский образ Docker, в котором установлены dotnetcore и Sqlcmd, я могу использовать MsSQL Server в качестве сервиса в конфигурации gitlab. (необходимо определить имя хоста SQL Server как IP в том же диапазоне, что и мой сервер).

Не простой ответ, а обходной путь для меня.