如何在Azure Pipeline中暂停执行若干秒以等待MariaDB启动?
解决Azure Pipeline中MariaDB启动延迟导致的连接问题
方法1:添加固定延迟(简单直接)
可以直接在docker run命令后通过Bash的sleep命令设置等待时间,给数据库足够的启动时间,示例如下:
docker pull <some_azure_repository>/databasedump:<tag_number> docker run -d --publish 3306:3306 <some_azure_repository>/databasedump:<tag_number> # 等待数据库完成启动,可根据实际情况调整秒数 sleep 30
你可以根据镜像的实际启动时长,调整sleep后的数字,比如改成50秒等。
方法2:等待数据库就绪后再执行测试(更可靠)
固定延迟可能出现等待时间不足或浪费资源的情况,推荐用脚本检测数据库是否能正常连接,直到连接成功再触发测试:
用MySQL客户端检测(需环境已安装mysql-client)
docker pull <some_azure_repository>/databasedump:<tag_number> docker run -d --name mariadb-test --publish 3306:3306 <some_azure_repository>/databasedump:<tag_number> # 循环检测数据库连接状态,每5秒尝试一次 until mysql -h localhost -u <你的数据库用户名> -p<你的数据库密码> -e "SELECT 1"; do echo "数据库尚未就绪,等待中..." sleep 5 done
用Python脚本检测(适配你的Python测试环境)
如果环境没装MySQL客户端,可利用Python编写检测脚本(你的测试环境已有Python):
import time import mysql.connector from mysql.connector.errors import OperationalError def wait_for_database(): while True: try: # 尝试连接数据库 conn = mysql.connector.connect( host="localhost", user="<你的数据库用户名>", password="<你的数据库密码>" ) conn.close() print("数据库已就绪,开始执行测试") break except OperationalError: print("数据库启动中,等待5秒后重试...") time.sleep(5) if __name__ == "__main__": wait_for_database()
将上述代码保存为wait_for_db.py,在Pipeline中执行:
docker pull <some_azure_repository>/databasedump:<tag_number> docker run -d --publish 3306:3306 <some_azure_repository>/databasedump:<tag_number> python wait_for_db.py
内容的提问来源于stack exchange,提问作者Ivajlo Iliev
相关产品推荐
相关产品推荐

