2014-11-13 5 views
5

Wir haben eine Jenkins Maven Build auf einem Windows-Slave laufen, die Maven-Paket auf jedem Commit läuft. Ich versuche das promoted-Build-Plugin zu verwenden, um hochgestufte Builds in einem Nexus-Release-Repository zu implementieren.Promoted Build-Plugin deploy Artefakte zu Repository

Ich habe die "promote build wann ..." auf manuelle Genehmigung und die Aktion zu "Deploy Artefakt zu Maven Repository" setzen die Repository-URL auf "http://example.com:8081/nexus/content/repositories/releases/" und die Repo-ID auf "release". jedoch, wenn die Zustimmung ausgelöst wir folgende Stack-Trace erhalten:

[INFO] Deployment in http://example.com:8081/nexus/content/repositories/releases/ (id=release,uniqueVersion=true) Deploying the main artifact artifactid-1.0.2.pom Uploading: http://example.com:8081/nexus/content/repositories/releases/groupid/artifactid/1.0.2/artifactid-1.0.2.pom ERROR: Failed to deploy artifacts: Could not transfer artifact groupid:artifactid:pom:1.0.2 from/to release (http://example.com:8081/nexus/content/repositories/releases/): Failed to transfer file: http://example.com:8081/nexus/content/repositories/releases/groupid/artifactid/1.0.2/artifactid-1.0.2.pom . Return code is: 401, ReasonPhrase: Unauthorized. org.apache.maven.artifact.deployer.ArtifactDeploymentException: Failed to deploy artifacts: Could not transfer artifact groupid:artifactid:pom:1.0.2 from/to release (http://example.com:8081/nexus/content/repositories/releases/): Failed to transfer file: http://example.com:8081/nexus/content/repositories/releases/groupid/artifactid/1.0.2/artifactid-1.0.2.pom . Return code is: 401, ReasonPhrase: Unauthorized. at org.apache.maven.artifact.deployer.DefaultArtifactDeployer.deploy(DefaultArtifactDeployer.java:143) at hudson.maven.reporters.MavenArtifactRecord.deploy(MavenArtifactRecord.java:193) at hudson.maven.RedeployPublisher.perform(RedeployPublisher.java:176) at hudson.plugins.promoted_builds.Promotion$RunnerImpl.build(Promotion.java:282) at hudson.plugins.promoted_builds.Promotion$RunnerImpl.doRun(Promotion.java:224) at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:533) at hudson.model.Run.execute(Run.java:1740) at hudson.model.Run.run(Run.java:1678) at hudson.plugins.promoted_builds.Promotion.run(Promotion.java:174) at hudson.model.ResourceController.execute(ResourceController.java:89) at hudson.model.Executor.run(Executor.java:240)

Wenn ich die Promotion Aktion ändern arbeitet die Build erneut ausgeführt und das deploy Ziel auszulösen Maven bereitstellen, wie erwartet, wenn ich ein git add Herausgeber scheitert auch bei der Authentifizierung. Beide Operationen sind erfolgreich, wenn sie lokal von dem Benutzer ausgeführt werden, der Jenkins ausführt.

Wie ermittelt das promoted builds plugin die Authentifizierungsdetails für die Bereitstellung?

+0

Ich habe Das gleiche Problem: Wie kann ich ein Repository bereitstellen, für das eine Authentifizierung erforderlich ist? –

Antwort

0

Um eine Bereitstellung durchzuführen, die Authentifizierung mit Maven erfordert, müssen Sie einen Server mit den richtigen Informationen innerhalb der settings.xml file konfigurieren. Als solches ändern (oder erstellen), um die Einstellungen Benutzer (unter ${user.home}/.m2/settings.xml) mit folgendem:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 
         https://maven.apache.org/xsd/settings-1.0.0.xsd"> 
    ... 
    <servers> 
    <server> 
     <id>releases</id> 
     <username>my_login</username> 
     <password>my_password</password> 
    </server> 
    </servers> 
    ... 
</settings> 

Dies definiert eine Serverkonfiguration releases mit dem angegebenen Benutzernamen und Passwort benannt. Bei Bedarf können Sie stattdessen eine Passphrase oder einen privaten Schlüssel verwenden.

Dann müssen Sie sicherstellen, dass Jenkins Ihre Maven-Einstellungsdatei korrekt liest. Unter Jenkins 2.8 können Sie zu "Jenkins> Globale Werkzeugkonfiguration" navigieren.

enter image description here

Diese beiden Optionen verweisen auf die globalen Maven Einstellungen und die Benutzereinstellungen wurde, dass früher geändert.

Schließlich müssen Sie sicherstellen, dass die konfigurierte Build-Aktion in Jenkins nach dem konfigurierten Server sucht. In Ihrem "Bereitstellen Artefakte zu Maven Repository" -Aktion, schreiben Sie Ihre deploy URL und die "Repository ID" sollte die <id> des Servers in der settings.xml, konfiguriert sein, die releases in diesem Fall:

enter image description here