django.db.utils.OperationalError: (2026, 'SSL connection error: Unable to get certificate')
django.db.utils.OperationalError: (2026, 'SSL connection error: Unable to get certificate')
我正试图在 Jenkins 上的 Django 应用程序中获得 运行 一些任务。 Django 无法连接到 Jenkins 上的 MySQL 数据库(位于 mac 上)。我应该注意到在本地一切正常。我将分享我的一些设置:
来自设置的数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '<myhost>',
'NAME': '<myname>',
'USER': '<myuser>',
'OPTIONS': {
'ssl': {
'ca': os.environ.get('SSL_CA_CERT_PATH'),
'cert': os.environ.get('SSL_CLIENT_CERT_PATH'),
'key': os.environ.get('SSL_CLIENT_KEY_PATH')
}
}
}
}
证书路径的环境变量似乎确实有效,我觉得这很奇怪。我在我的设置中使用以下 python 命令进行了调试,它确实打印出了预期的结果(文件路径和文件内容):
print(os.environ.get('SSL_CA_CERT_PATH'))
txt_opn = open(str(os.environ.get('SSL_CA_CERT_PATH')))
print(txt_opn.read())
print(os.environ.get('SSL_CLIENT_CERT_PATH'))
txt_opn = open(str(os.environ.get('SSL_CLIENT_CERT_PATH')))
print(txt_opn.read())
print(os.environ.get('SSL_CLIENT_KEY_PATH'))
txt_opn = open(str(os.environ.get('SSL_CLIENT_KEY_PATH')))
print(txt_opn.read())
错误信息
django.db.utils.OperationalError: (2026, 'SSL connection error: Unable to get certificate')
我在共享文件夹中有证书,chmod 777 一切。但是,我无权 chown 到 mysql:mysql,即使使用 sudo:
Sorry, user <myuser> is not allowed to execute '/usr/sbin/chown mysql:mysql client-cert.pem' as root on <myhost>.
最后,如果它是相关的,这就是我 运行宁作为 jenkins shell 脚本来启动任务。请记住,这里使用了许多看不见的詹金斯参数。设置只是我的 --settings,其他一切都是不言自明的。
詹金斯 Shell 脚本
export SSL_CA_CERT_PATH=$SSL_CA_CERT_PATH
export SSL_CLIENT_CERT_PATH=$SSL_CLIENT_CERT_PATH
export SSL_CLIENT_KEY_PATH=$SSL_CLIENT_KEY_PATH
echo "Making Virtual Environment..."
/usr/local/bin/virtualenv venv
source ./venv/bin/activate
echo "Installing Requirements..."
pip install -r requirements.txt --process-dependency-links
echo "Making Migrations..."
python manage.py makemigrations $SETTINGS
echo "Migrating Database Schema..."
python manage.py migrate $SETTINGS
echo "Running Jobs..."
IFS=',' read -r -a jobs_array <<< "$JOBS"
for JOB in "${jobs_array[@]}"
do
if [ "$GROUPED" = true ]; then
echo "Preparing to start Job Group $JOB..."
python manage.py runjobs $JOB $SETTINGS
else
echo "Preparing to start $JOB job..."
python manage.py runjob $JOB $SETTINGS
fi
done
echo "Jobs Completed!"
我一直在广泛地寻找答案,但仍然能够找到有用的东西。有人能解决这个问题吗?
我会 post 我的解决方案以防它在将来帮助某人,但问题是我的 Jenkins 参数之一没有正确设置。如果其他人遇到此问题,请仔细检查所有参数、它们的拼写以及它们可能引用的路径。
我正试图在 Jenkins 上的 Django 应用程序中获得 运行 一些任务。 Django 无法连接到 Jenkins 上的 MySQL 数据库(位于 mac 上)。我应该注意到在本地一切正常。我将分享我的一些设置:
来自设置的数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '<myhost>',
'NAME': '<myname>',
'USER': '<myuser>',
'OPTIONS': {
'ssl': {
'ca': os.environ.get('SSL_CA_CERT_PATH'),
'cert': os.environ.get('SSL_CLIENT_CERT_PATH'),
'key': os.environ.get('SSL_CLIENT_KEY_PATH')
}
}
}
}
证书路径的环境变量似乎确实有效,我觉得这很奇怪。我在我的设置中使用以下 python 命令进行了调试,它确实打印出了预期的结果(文件路径和文件内容):
print(os.environ.get('SSL_CA_CERT_PATH'))
txt_opn = open(str(os.environ.get('SSL_CA_CERT_PATH')))
print(txt_opn.read())
print(os.environ.get('SSL_CLIENT_CERT_PATH'))
txt_opn = open(str(os.environ.get('SSL_CLIENT_CERT_PATH')))
print(txt_opn.read())
print(os.environ.get('SSL_CLIENT_KEY_PATH'))
txt_opn = open(str(os.environ.get('SSL_CLIENT_KEY_PATH')))
print(txt_opn.read())
错误信息
django.db.utils.OperationalError: (2026, 'SSL connection error: Unable to get certificate')
我在共享文件夹中有证书,chmod 777 一切。但是,我无权 chown 到 mysql:mysql,即使使用 sudo:
Sorry, user <myuser> is not allowed to execute '/usr/sbin/chown mysql:mysql client-cert.pem' as root on <myhost>.
最后,如果它是相关的,这就是我 运行宁作为 jenkins shell 脚本来启动任务。请记住,这里使用了许多看不见的詹金斯参数。设置只是我的 --settings,其他一切都是不言自明的。
詹金斯 Shell 脚本
export SSL_CA_CERT_PATH=$SSL_CA_CERT_PATH
export SSL_CLIENT_CERT_PATH=$SSL_CLIENT_CERT_PATH
export SSL_CLIENT_KEY_PATH=$SSL_CLIENT_KEY_PATH
echo "Making Virtual Environment..."
/usr/local/bin/virtualenv venv
source ./venv/bin/activate
echo "Installing Requirements..."
pip install -r requirements.txt --process-dependency-links
echo "Making Migrations..."
python manage.py makemigrations $SETTINGS
echo "Migrating Database Schema..."
python manage.py migrate $SETTINGS
echo "Running Jobs..."
IFS=',' read -r -a jobs_array <<< "$JOBS"
for JOB in "${jobs_array[@]}"
do
if [ "$GROUPED" = true ]; then
echo "Preparing to start Job Group $JOB..."
python manage.py runjobs $JOB $SETTINGS
else
echo "Preparing to start $JOB job..."
python manage.py runjob $JOB $SETTINGS
fi
done
echo "Jobs Completed!"
我一直在广泛地寻找答案,但仍然能够找到有用的东西。有人能解决这个问题吗?
我会 post 我的解决方案以防它在将来帮助某人,但问题是我的 Jenkins 参数之一没有正确设置。如果其他人遇到此问题,请仔细检查所有参数、它们的拼写以及它们可能引用的路径。