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