通常在執行 CI/CD 步驟的時候,我們可能會想要在發布之前順帶執行測試。執行測試時我們可能會需要資料庫的服務做協助,例如使用 MySQL。
在 Drone 設定 MySQL 服務
以下是一個在 Drone CI yaml 檔案中設定 MySQL 服務的範例:
services:
- name: mysql-server
image: mysql
environment:
MYSQL_DATABASE: testing
MYSQL_ALLOW_EMPTY_PASSWORD: yes
如果你在步驟中執行測試,那麼你可能會發現你無法連線到上面的 MySQL,原因可能有兩個:
第一個原因:主機位址錯誤
你不能使用 localhost 或是 127.0.0.1 來做連線,你需要使用 mysql-server
位址來做連線,這個位址取決於你的 MySQL Service name 取名為什麼。
第二個原因:MySQL 還沒準備好
在執行測試之前,要先確認 MySQL 已經完成準備,通常完成準備會需要一百二十秒。
因此我們會需要在執行測試的步驟前做檢查,以下是一個不斷檢查直到 MySQL 準備完成。
- name: mysql healthcheck
image: mysql
commands:
- while ! mysqladmin ping -h mysql-server -u root --silent; do sleep 1; done
- mysql -h mysql-server -u root -e "CREATE TABLE IF NOT EXISTS testing.pipelines (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL);"