我已经为MySQL设置了Azure数据库。我可以使用Azure云 shell 连接mysql -h ...mysql.database.azure.com --ssl -u web -p
现在我想做的是能够从Azure管道连接到这个数据库,目的是使用数据库来跟踪我们工件的版本号。
我最初的测试管道yaml看起来像
trigger:
- main
pool:
vmImage: ubuntu-latest
steps:
- checkout: none
- bash: |
mysql -h ...mysql.database.azure.com -u web -p -D applications -N -e "select version, snapshot from releases where name='$1'" | while IFS= read -r value
do
echo $value
done
然而,bash脚本永远不会完成。指示器只是旋转,我还没有收到超时或任何类型的错误。
由于数据库被设置为使用SSL,因此我的下一个管道迭代如下所示
trigger:
- main
pool:
vmImage: ubuntu-latest
steps:
- checkout: none
- bash: |
mysql -h ...mysql.database.azure.com --ssl -u web -p -D applications -N -e "select version, snapshot from releases where name='$1'" | while IFS= read -r value
do
echo $value
done
它镜像了我在CloudShell中使用的相同连接。
Starting: Bash
==============================================================================
Task : Bash
Description : Run a Bash script on macOS, Linux, or Windows
Version : 3.182.0
Author : Microsoft Corporation
Help : https://learn.microsoft.com/azure/devops/pipelines/tasks/utility/bash
==============================================================================
Generating script.
========================== Starting Command Output ===========================
/usr/bin/bash --noprofile --norc /home/vsts/work/_temp/b5b259c5-bee8-4e95-b1c6-50a98baaf7dc.sh
mysql: [ERROR] unknown option '--ssl'.
Finishing: Bash
最后,我尝试下载推荐的证书并将其添加到连接中
trigger:
- main
pool:
vmImage: ubuntu-latest
steps:
- checkout: none
- task: DownloadSecureFile@1
inputs:
secureFile: DigiCertGlobalRootG2.crt.pem
- bash: |
mysql -h ...mysql.database.azure.com --ssl_cert $(Agent.TempDirectory)/DigiCertGlobalRootG2.crt.pem -u web -p -D applications -N -e "select version, snapshot from releases where name='$1'" | while IFS= read -r value
do
echo $value
done
这再次导致任务只是停留在那里,没有输出。我不确定这是否是防火墙问题(意味着我需要向数据库防火墙设置添加规则)?如果是这种情况,那么我将如何确定允许的IP地址范围?
顺便说一下,我已经有了以下规则
{
"endIpAddress": "55.226.19.255",
"id": "/subscriptions/1fa96361-56c7-4090-8823-26ae03e4c38d/resourceGroups/VS-americas-manufacturing-Group/providers/Microsoft.DBforMySQL/servers/mfg-mysql-eus-1/firewallRules/cloudshell",
"name": "cloudshell",
"resourceGroup": "VS-americas-manufacturing-Group",
"startIpAddress": "52.226.19.0",
"type": "Microsoft.DBforMySQL/servers/firewallRules"
}
但这似乎不适用于管道。
那么,我需要在服务器上或在我的管道中进行哪些设置更改,才能使它工作呢?
2条答案
按热度按时间bkhjykvo1#
万一有人有和我一样的问题,发现这个帖子...
阅读了对建议任务的评论,我在使用AzureMysqlDeployment@1部署ef迁移脚本时遇到了同样的错误:
“错误:MySQL服务器列表为空。MySQL服务器主机名无效。”
根据microsoft documentation for the pipeline task的说法,这个任务似乎只适用于Azure上的MySQL单服务器数据库。Azure建议为所有新的开发创建一个灵活的服务器MySQL数据库,这就是它在我的情况下不起作用的原因。
相反,我使用了一个codlin任务并运行了一个mysql命令来使它工作
ef1yzkbh2#
如果你要运行脚本并在Azure Database for MySQL中更改数据库。你可以使用Azure Database for MySQL Deployment task: