我創建了一個 Jenkins 管道并分享了以下階段。Jenkins 服務器托管在 EC2 實體上,MySQL 資料庫通過 AWS RDS 托管。
stages {
stage("Build") {
steps {
sh 'php --version'
sh 'composer install'
sh 'composer --version'
}
}
stage("Unit test") {
steps {
sh "sed -i -e 's/\r//g' .env.example"
sh 'cp .env.example .env'
sh "sed -i 's/^DB_DATABASE=.*/&${DB_DATABASE}/' .env"
sh "sed -i 's/^DB_USERNAME=.*/&${DB_USERNAME}/' .env"
sh "sed -i 's|^DB_HOST=.*|&${DB_HOST}|' .env"
sh script: $/
sed -i 's/^\(DB_PASSWORD=*\).*$/\1"${DB_PASSWORD}"/' .env
sed -i 's/^\(APP_ENV=*\).*$/\1"testing"/' .env
/$
sh 'php artisan migrate'
sh 'php artisan test'
}
}
問題是在進行構建時出現以下錯誤:
php artisan migrate
Illuminate\Database\QueryException
SQLSTATE[HY000] [2002] Connection timed out (SQL: select * from information_schema.tables where table_schema = **** and table_name = migrations and table_type = 'BASE TABLE')
這樣做的原因是 Jenkins 為 DB_HOST 獲取了錯誤的先前 .env 值,但在 .env DB_HOST 內部它具有正確的值并且php artisan migrate也可以從終端作業。
已通過終端執行命令以清除應用程式快取、配置:快取等。
如何從詹金斯解決這個問題?請幫忙。
uj5u.com熱心網友回復:
終于找到了解決辦法。
確保 Jenkinsfile 中的變數名與 .env 的鍵名不相似。
在我的例子中,它選擇了與 .env 鍵匹配的 Jenkinsfile 變數名,而不是我傳遞的值。
因此,將DB_HOSTJenkinsfile 中的更改為DIFF_DB_HOST,它作業正常。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/497292.html
上一篇:我如何告訴詹金斯在作業完成時使用“故障轉移”標簽組而不是給定標簽?
下一篇:失敗時暫停Jenkins作業
