2017-06-16 120 views
6

我使用Bamboo 6.0.3 build 60004,我安裝了official Artifactory plugin for Bamboo的版本2.1.0從Bamboo發佈到Artifactory 6

該項目的build.gradle樣子:

apply plugin: 'maven-publish' 
apply plugin: 'com.jfrog.artifactory' 
... 
task androidJavadocs(type: Javadoc) { 
    source = android.sourceSets.main.java.srcDirs 
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) 
} 

task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) { 
    classifier = 'javadoc' 
    from androidJavadocs.destinationDir 
} 

task androidSourcesJar(type: Jar) { 
    classifier = 'sources' 
    from android.sourceSets.main.java.srcDirs 
} 

artifacts { 
    archives androidSourcesJar 
    archives androidJavadocsJar 
} 

afterEvaluate { 
    androidJavadocs.classpath += files(android.libraryVariants.collect { variant -> 
     variant.javaCompile.classpath.files 
    }) 
} 

publishing { 
    publications { 
     android.buildTypes.all { variant -> 
      "${variant.name}Aar"(MavenPublication) { 
       // set values from Android manifest file 
       groupId group 
       version version 
       if (variant.name == "release") { 
        artifactId project.getName() 
       } 
       else { 
        artifactId "${project.getName()}-${variant.name}" 
       } 

       artifact "$buildDir/outputs/aar/${project.getName()}-${variant.name}-${version}.aar" 
       artifact androidJavadocsJar 

       pom.withXml { 
        def dependenciesNode = asNode().appendNode('dependencies') 

        // List all compile dependencies and write to POM 
        configurations.compile.getAllDependencies().each { Dependency dep -> 
         if (dep.group == null || dep.version == null || dep.name == null || dep.name == "unspecified") 
          return // ignore invalid dependencies 

         def dependencyNode = dependenciesNode.appendNode('dependency') 
         dependencyNode.appendNode('groupId', dep.group) 
         dependencyNode.appendNode('artifactId', dep.name) 
         dependencyNode.appendNode('version', dep.version) 

         if (!dep.transitive) { 
          // If this dependency is transitive, we should force exclude all its dependencies them from the POM 
          def exclusionNode = dependencyNode.appendNode('exclusions').appendNode('exclusion') 
          exclusionNode.appendNode('groupId', '*') 
          exclusionNode.appendNode('artifactId', '*') 
         } else if (!dep.properties.excludeRules.empty) { 
          // Otherwise add specified exclude rules 
          def exclusionNode = dependencyNode.appendNode('exclusions').appendNode('exclusion') 
          dep.properties.excludeRules.each { ExcludeRule rule -> 
           exclusionNode.appendNode('groupId', rule.group ?: '*') 
           exclusionNode.appendNode('artifactId', rule.module ?: '*') 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 

def libraryGroupId = group 
def libraryVersion = version 

artifactory { 
    contextUrl = '<artifactory_url>' 

    publish { 
     repository { 
      repoKey = '<repoKey>' 

      username = artifactory_username 
      password = artifactory_password 
     } 
     defaults { 
      android.buildTypes.all { variant -> 
       publications("${variant.name}Aar") 
       publishArtifacts = true 
      } 

      properties = ['qa.level': 'basic', 'dev.team': 'core'] 
      publishPom = true 
     } 
    } 
} 

當我在我的筆記本電腦上運行該命令gradle build assembleRelease artifactoryPublish,其上載於Artifactory的回購的aarpom文件。

我嘗試使用Artifactory Deployment任務在構建任務,做gradle build assembleRelease(所以同樣的,但沒有發佈到artifactory的),然後再運行部署項目,但它而不是僅發佈AAR文件和artifactory的目錄結構沒有按看起來不一樣(它不會按子文件夾分解包名)。如何實現與竹相同?

回答

1

根據Bamboo Artifacotry plugin official page,Bamboo 6.0還沒有插件(但是對於Bamboo 5.15)。 但是,如果您使用等級任務進行發佈,則不會使用Bamboo插件。

+0

這根本不回答問題。我在問如何使用插件發佈'aar'文件和'pom'文件,就像我沒有插件一樣。我知道這是兩個不同的事情,但我期望使用相同的結果,但情況並非如此 – Guillaume

2

不要使用JFrog,我們使用Nexus,但它看起來像插件中的部署項目任務僅用於從部署項目依賴的構建計劃中獲取共享/發佈的構件並將其上載到Artifactory 。因此,對於您的第一個問題,POM沒有上傳,POM是源構建計劃中提供的部署項目中的共享工件?那麼您在構建計劃,歸檔AAR文件和POM中有兩個共享工件?

對於第二個問題,它可能取決於如何在源構建計劃中定義共享工件的路徑。它看起來不像部署任務給你任何關於將artifact寫入artifactory的選項。然而,我注意到了正常的建設計劃任務使用,你有更多的控制JSON文件描述:

https://www.jfrog.com/confluence/display/RTF/Using+File+Specs

所以我想如果你將有更多的靈活性,如果你從投入正常的構建計劃發佈自己的神器,而而不是部署項目,並且只需在該環境的部署項目任務開始時從artifactory下載工件即可。

真的不是一個解決方案 - 只是看一堆事情可能會有所幫助。

+0

是的,我之前看到過文件規範,但沒有太多關於如何幫助我做我想做的事情的示例。我不介意使用它,但如何?此外,它需要是自動的,因此可以爲每個項目設置像groupId/artifactId之類的東西,但版本需要從AAR文件本身獲取 – Guillaume

0

貌似沒有可用於版本6+竹服務器設在這裏的更新: https://marketplace.atlassian.com/plugins/org.jfrog.bamboo.bamboo-artifactory-plugin/server/overview

不過,我現在想將其與Atlassian的竹版本6.3.2建立60307,並不斷收到此錯誤:

Could not execute task no Plugin with key 'org.jfrog.bamboo.bamboo- 
    artifactory-plugin:artifactoryGenericResolveTask' is installed. 

嘗試添加它作爲一個可執行文件作爲記錄在這裏https://www.jfrog.com/confluence/display/RTF/Bamboo%20Artifactory%20Plug-in

但仍收到錯誤。所以再次嘗試使用spec文件,它建議只使用通用的解決任務,但仍然沒有運氣。

+0

是的我正在嘗試使用相同的插件,但我無法確定瞭解如何使它像我想要的那樣工作。在一個側面說明,這不是一個真正的答案 – Guillaume

相關問題