2017-09-18 2 views
0

J'essaie d'exécuter certaines tâches dans une application Django sur Jenkins. Django ne parvient pas à se connecter à la base de données MySQL sur Jenkins (qui est sur un mac). Je devrais noter que tout fonctionne bien localement. Je vais partager certaines de mes paramètres:django.db.utils.OperationalError: (2026, 'Erreur de connexion SSL: Impossible d'obtenir le certificat')

bases de données de paramètres

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') 
       } 
      } 
     } 
    } 

Les variables d'environnement pour les chemins de cert semblent effectivement travailler que je trouve bizarre. Je déboguée avec les commandes de python suivantes dans mes paramètres et il fait imprimer les résultats attendus (chemins de fichiers et le contenu du fichier):

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()) 

Message d'erreur

django.db.utils.OperationalError: (2026, 'SSL connection error: Unable to get certificate') 

j'ai les certs en un dossier partagé et chmod 777 tout. Je n'ai pas la permission de chown à mysql: mysql cependant, même avec sudo:

Sorry, user <myuser> is not allowed to execute '/usr/sbin/chown mysql:mysql client-cert.pem' as root on <myhost>. 

Enfin, dans le cas où est il est pertinent, voici ce que je suis en cours d'exécution en tant que script shell de jenkins pour lancer des tâches. Il est évident que de nombreux paramètres jenkins invisibles sont utilisés ici. Les réglages sont juste mes - réglages, et tout le reste est assez explicite.

Jenkins Shell Script

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

je cherche une réponse loin et ont encore été en mesure de trouver quelque chose qui fonctionne. Quelqu'un at-il une solution à ce problème?

Répondre

0

Je posterai ma solution au cas où cela aiderait quelqu'un dans le futur, mais le problème était que l'un de mes paramètres de Jenkins n'était pas réglé correctement. Si quelqu'un d'autre rencontre ce problème, veuillez vérifier tous vos paramètres, leur orthographe et les chemins auxquels ils se réfèrent.