JenkinsのDjangoアプリケーションでいくつかのタスクを実行しようとしています。 DjangoはJenkinsのMySQLデータベースに接続できません(これはMac上にあります)。すべてがローカルでうまく動作することに注意してください。私は私の設定の一部を共有するつもりです:セッティングdjango.db.utils.OperationalError:(2026、 'SSL接続エラー:証明書を取得できません')
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:
Sorry, user <myuser> is not allowed to execute '/usr/sbin/chown mysql:mysql client-cert.pem' as root on <myhost>.
最後に、ここでは、それが関連している私は、タスクのキックするジェンキンスシェルスクリプトとして実行していますどのような場合には:でもsudoのと、しかし、mysqlの。ここでは、目に見えないジェンキンのパラメータが多数使用されています。設定はちょうど私の--settingsであり、その他のものはかなり自明です。
ジェンキンスシェルスクリプト
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!"
私は広範囲に答えを探していると、まだ働く何かを見つけることができました。誰にもこの問題の解決策がありますか?