laravel - 无法登录到 Gitlab CI 中的 MSSQL docker 以开始测试迁移

标签 laravel docker gitlab-ci gitlab-ci-runner

我想为我的项目设置 CI/CD。我的问题是当 Laravel 开始迁移时会发生此错误:

enter image description here

在我的 gitlab-ci 文件中,我测试了本地主机、127.0.0.01 和图像名称 (mcr.microsoft.com/mssql/server) 作为 DB-Host 和 MSSQL-Host 的主机。它们都不起作用。我不知道是因为 docker 和 gitlab 之间的网络问题还是 Dockerfile 配置问题。

这是我的 Dockerfile:

# Set the base image for subsequent instructions
FROM php:7.3

# Update packages
RUN apt-get update

# Install PHP and composer dependencies
RUN apt-get install gnupg -qq git wget curl libmcrypt-dev libjpeg-dev libpng-dev libfreetype6-dev 
libbz2-dev libzip-dev

# Clear out the local repository of retrieved package files
RUN apt-get clean

# Install needed extensions
# Here you can install any other extension that you need during the test and deployment process
RUN docker-php-ext-install pdo_mysql zip

# adding custom MS repository
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql- 
release.list
# install SQL Server drivers
RUN apt-get update && ACCEPT_EULA=Y apt-get install -y unixodbc-dev msodbcsql17
RUN pecl install sqlsrv \
&& docker-php-ext-enable sqlsrv

RUN pecl install pdo_sqlsrv \
&& docker-php-ext-enable pdo_sqlsrv
RUN echo "extension= pdo_sqlsrv.so" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`
RUN echo "extension= sqlsrv.so" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`
# Install Composer
RUN curl --silent --show-error https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# Install Laravel Envoy
RUN composer global require "laravel/envoy=~1.0"

.gitlab-ci.yaml:

image: registry.gitlab.com/mycompany/myRegisteryContainer

services:
  - mcr.microsoft.com/mssql/server:2019-latest

variables:
  MSSQL_HOST: 127.0.0.1
  MSSQL_PID: Developer
  ACCEPT_EULA: Y
  SA_PASSWORD: myStrongPassword
  DB_CONNECTION: sqlsrv
  DB_PORT: 1433
  DB_HOST : 127.0.0.1
  DB_DATABASE: dbname
  DB_USERNAME: dbuser
  DB_PASSWORD: dbpassword

stages:
  - test
  - deploy-prod

unit_test:
  stage: test
  script:
    - cp .env.example .env
    - composer install
    - php artisan key:generate
    - php artisan migrate
    - vendor/bin/phpunit

deploy_production:
  stage: deploy-prod
  script:
    - "which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )"
    - eval $(ssh-agent -s)
    - ssh-add <(echo "$SSH_PRIVATE_KEY")
    - mkdir -p ~/.ssh
    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'

    - ~/.composer/vendor/bin/envoy run deploy-prod --commit="$CI_COMMIT_SHA"
  environment:
    name: production
    url: https://api.mywebsite.com
  when: manual
  only:
    - master

最佳答案

根据documentation为您创建的 automagic 默认服务名称应该是 mcr.microsoft.com__mssql__servermcr.microsoft.com-mssql-server (虽然我没有测试,我有疑问关于此处真正处理句号的方式)。

您可能想要 create a service alias在这种情况下,要使其更短、更受控制且更容易。

gitlab-ci.yml

services:
  - name: mcr.microsoft.com/mssql/server:2019-latest
    alias: mssql

然后您可以使用mssql 作为您的服务器名称来访问数据库。如果你的 ci 文件中的变量正确地完成了它们的工作,你应该只需要设置

variables:
  MSSQL_HOST: mssql
  # [...]
  DB_HOST: mssql

关于laravel - 无法登录到 Gitlab CI 中的 MSSQL docker 以开始测试迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59695070/

相关文章:

php - Laravel 5 CMS 制作?

php - php中箭头运算符(->)和数组索引括号([])之间的区别

Laravel 在本地 ubuntu 20 中显示空白页

gitlab-ci - 如何保存用于在 Gitlab CI 中执行构建的 Docker 容器?

php - Laravel 4 中的分页适用于一页。但不为另一个人工作

python - 来自 Django 的开发服务器端口绑定(bind)错误的 ptvsd 远程调试

docker - 如何在所有Docker Swarm节点上运行相同的容器

docker - 无法让 docker healthcheck 与 ECS Fargate v 1.4.0 一起使用

带有变量的 Gitlab CI 复制文件

https - 如何使用 GKE 和 kube-lego 在 Gitlab Auto DevOps 上制作 SSL/HTTPS 证书