Azure DevOps PHP构建需要ext sqlsrv

Azure DevOps PHP构建需要ext sqlsrv,php,azure-devops,Php,Azure Devops,我正试图为我在Azure DevOps上托管的PHP项目构建一个构建管道。长话短说,我需要安装sqlsrv PHP扩展才能使构建正常工作。我如何配置azure-pipelines.yml脚本以包含该脚本 以下是我当前的脚本: trigger: - master pool: vmImage: 'ubuntu-latest' variables: phpVersion: 7.3 steps: - script: | sudo update-alternatives --set

我正试图为我在Azure DevOps上托管的PHP项目构建一个构建管道。长话短说,我需要安装sqlsrv PHP扩展才能使构建正常工作。我如何配置azure-pipelines.yml脚本以包含该脚本

以下是我当前的脚本:

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

variables:
  phpVersion: 7.3

steps:
- script: |
    sudo update-alternatives --set php /usr/bin/php$(phpVersion)
    sudo update-alternatives --set phar /usr/bin/phar$(phpVersion)
    sudo update-alternatives --set phpdbg /usr/bin/phpdbg$(phpVersion)
    sudo update-alternatives --set php-cgi /usr/bin/php-cgi$(phpVersion)
    sudo update-alternatives --set phar.phar /usr/bin/phar.phar$(phpVersion)
    php -version
  displayName: 'Use PHP version $(phpVersion)'

- script: composer install --no-interaction --prefer-dist
  displayName: 'composer install'
这是我在生成日志中得到的错误:

Your requirements could not be resolved to an installable set of packages.

Problem 1
- The requested PHP extension ext-sqlsrv * is missing from your system. Install or enable PHP's sqlsrv extension.

##[error]Bash exited with code '2'.
我如何配置azure-pipelines.yml脚本以包含该脚本

正如atymic所说,您首先需要安装带有PEAR的PHP扩展社区库(pecl)。请在
使用PHP版本$(phpVersion)
任务之前尝试运行以下脚本:

- script: |
    curl -s https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
    sudo bash -c "curl -s https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list"
    sudo apt-get update
    sudo ACCEPT_EULA=Y apt-get -y install msodbcsql17 mssql-tools
    sudo apt-get -y install unixodbc-dev

- script: |
    sudo apt-get -y install gcc g++ make autoconf libc-dev pkg-config
    sudo apt-get install php-pear php-dev
    sudo pecl install sqlsrv
    sudo pecl install pdo_sqlsrv


- script: |
    sudo bash -c "echo extension=sqlsrv.so > /etc/php7.X-sp/conf.d/sqlsrv.ini"
    sudo bash -c "echo extension=pdo_sqlsrv.so > /etc/php7.X-sp/conf.d/pdo_sqlsrv.ini"
    sudo service php7.X-fpm-sp restart

第一个脚本用于安装
sqlsrv
installed的先决条件。第二个用于安装扩展。然后,安装后,运行第三个脚本任务来创建此扩展的配置文件,并重新启动PHP。

Merlin Liang的回答对我来说是一个很大的启发,但我仍然很难让composer接受SQLSRV

首先,我必须修改David Legatt提到的一些路径。 第二个问题是我试图修改并重新启动FPM。 关键是删除重启部分并修改CLI,而不是FPM

试试这个,对我有用:

- script: sudo apt-get update
  displayName: 'Update apt package tool'

- script: |
    curl -s https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
    sudo bash -c "curl -s https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list"
    sudo ACCEPT_EULA=Y apt-get -y install msodbcsql17 mssql-tools
    sudo apt-get -y install unixodbc-dev    
  displayName: 'SqlSrv prerequisites install'

- script: |
    sudo apt-get -y install gcc g++ make autoconf libc-dev pkg-config
    sudo apt-get install php-pear php-dev
    sudo pecl config-set php_ini /etc/php/7.3/fpm/php.ini
  displayName: 'PECL install'

- script: |
    sudo pecl install sqlsrv
    sudo pecl install pdo_sqlsrv    
  displayName: 'SqlSrv extension install'

- script: |
    sudo bash -c "echo extension=/usr/lib/php/20180731/sqlsrv.so > /etc/php/7.3/cli/conf.d/sqlsrv.ini"
    sudo bash -c "echo extension=/usr/lib/php/20180731/pdo_sqlsrv.so > /etc/php/7.3/cli/conf.d/pdo_sqlsrv.ini"    
  displayName: 'SQLSRV modify ini files'

对于那些正在寻找一个运行yaml文件来执行带有sqlsrv扩展名的php单元测试的人。选择phpVersion 7.4很重要。因为最新的sqlsrv模块是使用比PHP7.3更新的PHPAPI编译的

stages:
- stage: Build
  displayName: Build stage
  variables:
    phpVersion: '7.4'
  jobs:
  - job: BuildJob
    pool:
      vmImage: $(vmImageName)
    steps:
    - script: |
        sudo update-alternatives --set php /usr/bin/php$(phpVersion)
        sudo update-alternatives --set phar /usr/bin/phar$(phpVersion)
        sudo update-alternatives --set phpdbg /usr/bin/phpdbg$(phpVersion)
        sudo update-alternatives --set php-cgi /usr/bin/php-cgi$(phpVersion)
        sudo update-alternatives --set phar.phar /usr/bin/phar.phar$(phpVersion)
        php -version
      workingDirectory: $(rootFolder)
      displayName: 'Use PHP version $(phpVersion)'

    - script: php -i | grep "Loaded Configuration File"
      workingDirectory: $(rootFolder)
      displayName: 'Get Ini location'

    - script: composer install --no-interaction --prefer-dist
      workingDirectory: $(rootFolder)
      displayName: 'Composer install'

    - script: sudo apt-get update
      displayName: 'Update apt package tool'

    - script: |
        curl -s https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
        sudo bash -c "curl -s https://packages.microsoft.com/config/ubuntu/18.04/prod.list > /etc/apt/sources.list.d/mssql-release.list"
        sudo ACCEPT_EULA=Y apt-get -y install msodbcsql17 mssql-tools
        sudo apt-get -y install unixodbc-dev    
      displayName: 'SqlSrv prerequisites install'

    - script: |
        sudo apt-get -y install gcc g++ make autoconf libc-dev pkg-config
        sudo apt-get install php-pear php-dev
        sudo pecl config-set php_ini /etc/php/7.4/fpm/php.ini
      displayName: 'PECL install'

    - script: |
        sudo pecl install sqlsrv
        sudo pecl install pdo_sqlsrv    
      displayName: 'SqlSrv extension install'

    - script: |
        sudo bash -c "echo extension=/usr/lib/php/20190902/sqlsrv.so > /etc/php/7.4/cli/conf.d/99-sqlsrv.ini"
        sudo bash -c "echo extension=/usr/lib/php/20190902/pdo_sqlsrv.so > /etc/php/7.4/cli/conf.d/99-sqlsrv.ini"    
      displayName: 'SQLSRV modify ini files'

    - script: vendor/bin/phpunit
      workingDirectory: $(rootFolder)
      displayName: 'Run PHP tests with phpunit'

图像中是否安装了pecl?它不是。我更新了我的脚本,但现在的问题似乎是我无法修改php.ini以启用扩展。前两个步骤似乎工作正常。我必须用第三部分中的前两个命令修复一些路径问题,因为/etc/php7.3-sp/conf.d不存在,但php重启一直失败。相反,我选择为我的应用程序创建一个构建环境,因为我没有做任何特定于sqlsrv的事情,所以我将ORM配置为使用sqlite而不是sqlsrv