django.db.utils.OperationalError:(2026,'SSL连接错误:无法获取证书')

时间:2017-09-18 16:29:41

标签: django jenkins google-cloud-sql

我试图在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的证书。我没有权限使用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脚本运行的任务。请记住,这里使用了许多看不见的jenkins参数。设置只是我的设置,其他一切都非常自我解释。

Jenkins 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!"

我一直在寻找答案,并且能够找到有用的东西。有没有人有这个问题的解决方案?

1 个答案:

答案 0 :(得分:0)

我将发布我的解决方案,以防将来帮助某人,但问题是我的Jenkins参数设置不正确。如果其他人遇到此问题,请仔细检查所有参数,拼写和他们可能引用的路径。