2013-09-24 37 views
1

我想在發佈期間使用物理用戶的憑據。我使用下面的堆棧:我自己的maven插件包裝maven-release-plugin,jenkins,nexus,git。在Jenkins上,我使用參數和密碼掩碼插件爲正在執行構建的用戶提供用戶名和密碼。問題是Jenkins,Git和Nexus的證書可能不同,所以我不能重複使用它們。很明顯,我可以使用CI用戶來驗證所有內容,但由於某些規定,我無法做到這一點。在使用maven發佈插件時傳遞nexus的憑證

首先我嘗試使用-Dusername和-Dpassword,但1)這隻適用於git,2)git和nexus的密碼不同。除此之外,我想爲git使用基於密鑰的身份驗證。

然後我試圖執行行家離型插件之前,通過改變會話/項目的對象以編程方式更改憑證:

final MavenExecutionRequest request = new DefaultMavenExecutionRequest() 
       .setLocalRepository(session.getLocalRepository()) 
       .setPluginArtifactRepositories(session.getCurrentProject().getPluginArtifactRepositories()) 
       .setRemoteRepositories(session.getCurrentProject().getRemoteArtifactRepositories()) 
       .setBaseDirectory(new File(properties.getCheckoutDirectory())) 
       .setPluginGroups(session.getPluginGroups()) 
       .setProjectPresent(true) 
       .setPom(new File(properties.getCheckoutDirectory() + "/pom.xml")) 
       .setGoals(Arrays.asList(goal)) 
       .setInteractiveMode(false) 
       .setUserSettingsFile(new File(session.getSystemProperties().getProperty("user.home") + "/.m2/settings.xml")) 
       ; 


     request.setUserProperties(preparePropertiesForMvn(properties)); 
     for (ArtifactRepository artifactRepository : session.getCurrentProject().getRemoteArtifactRepositories()) { 
      if (artifactRepository.getId().equals("nexus-releases")) { 
       artifactRepository.setAuthentication(new Authentication(properties.getNexusUser(),properties.getNexusPassword())); 
      } 
     } 

     final MavenExecutionResult result = defaultMaven.execute(request); 

在非常終末期行家 - 部署 - 插件(這是由釋放的插件執行)讀取〜/ .m2/settings.xml文件並從中獲取(錯誤-CI)憑證。

是否有另一種方式比準備自己的定製settings.xml文件的構建與建立憑據?我想避免將憑據存儲在本地存儲上。

回答

0

您可以用下面的方法來添加自己的服務器配置:

org.apache.maven.settings.Settings.addServer(org.apache.maven.settings.Server) 

測試,與help:effective-settings覈實,因爲我也沒辦法測試agains此刻的任何存儲庫管理。

只要你在Maven deploy插件之前用你自己的服務器配置調用上述方法,你應該很好。

Server server = new Server(); 
    server.setId("myServer"); 
    server.setUsername("myUserName"); 
    server.setPassword("myPassword"); 
    settings.addServer(server); 
+0

我試着用這個,但我不知道爲什麼maven-deploy-plugin無論如何讀取settings.xml而不是使用這個設置。 – user2810516

+0

該版本是從您從命令行執行的主版本中單獨構建而成的。你看過「準備目標」嗎? –