我已经创建了一个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
IlluminateDatabaseQueryException
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
也可以从终端工作。
已执行命令清除应用程序缓存,通过终端配置:cache等。
如何从Jenkins解决这个问题?请帮助。
终于找到解决办法了。
确保Jenkinsfile中的变量名与.env的键名不相似。
在我的情况下,它是拾取与。env键匹配的Jenkinsfile变量名,而不是我传递的值。
因此,将Jenkinsfile中的DB_HOST
更改为DIFF_DB_HOST
,它工作正常。