10 votes

La bibliothèque partagée de Jenkins ne trouve pas le pilote SQL

Il s'agit d'une nouvelle classe dans une bibliothèque partagée pour Jenkins.

La bibliothèque partagée est chargée via la méthode standard sous Manage Jenkins > Configure System

package com.mycorp.core;

@Grab(group='com.microsoft.sqlserver', module='mssql-jdbc', version='6.4.0.jre8')
import com.microsoft.sqlserver.jdbc.SQLServerDriver
import groovy.sql.Sql

class MySQLClass implements Serializable {
    def dbconnection
    def dbURL
    def dbUsername
    def dbPassword
    def dbDriver

    MySQLClass(databaseConfig) {
        //Set any instance variables required.    
        this.dbURL = databaseConfig.sql.url
        this.dbUsername = databaseConfig.sql.username
        this.dbPassword = databaseConfig.sql.password
        this.dbDriver = databaseConfig.sql.driver
    }

    def getConnection() {
        return Sql.newInstance(dbURL,dbUsername,dbPassword,dbDriver)
    }
}

L'objet databaseConfig est configuré comme :

def databaseConfig = [
    url: 'jdbc:sqlserver://myhost:1433;databaseName=mydatabase',
    user: 'user',
    password: 'password',
    driver: 'com.microsoft.sqlserver.jdbc.SQLServerDriver'
]

Lorsque MyClass.getConnection() est appelé, il échoue avec :

java.sql.SQLException: No suitable driver found for jdbc:sqlserver://myhost:1433;databaseName=mydatabase
    at java.sql.DriverManager.getConnection(DriverManager.java:689)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)

Je ne sais pas pourquoi les commandes "@Grab" et "import" ne rendent pas le pilote disponible.

J'ai essayé d'ajouter :

@GrabConfig(systemClassLoader = true)

comme suggéré ailleurs, mais cela fait échouer la compilation de la classe - Jenkins commence à la voir comme un script plutôt que comme une classe et lance donc l'erreur de nom de classe dupliqué.

Une idée des experts de Stackoverflow ?

4voto

Vitalii Vitrenko Points 3050

Vous pouvez enregistrer un pilote manuellement

MySQLClass(databaseConfig) {
    //Set any instance variables required.    
    //...
    DriverManager.registerDriver(new SQLServerDriver())
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X