从Bamboo 6发布到Artifactory

时间:2017-06-16 06:17:01

标签: artifactory bamboo

我正在使用Bamboo 6.0.3 build 60004,我安装了official Artifactory plugin for Bamboo的版本2.1.0

项目的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的构建任务之后运行(所以相同但没有发布到工件),但它只发布了aar文件并且artifactory中的目录结构看起来并不相同(它不会通过子文件夹细分包名称)。如何与Bamboo实现相同的目标?

3 个答案:

答案 0 :(得分:2)

不要使用JFrog,我们使用Nexus,但看起来插件中的部署项目任务只是为了从部署项目依赖的构建计划中获取共享/发布的工件,并将其上传到Artifactory的。因此,对于您的第一个问题,POM没有被上传,POM是源构建计划中为共享项目提供的共享工件吗?那么你在该构建计划中有两个共享工件,即归档AAR文件和POM?

对于第二个问题,可能取决于您如何在源构建计划中定义共享工件的路径。看起来部署任务不会为您提供有关将工件写入工件的位置的任何选项。但是,我注意到正常的构建计划任务使用了一个JSON文件描述符,您可以在其中获得更多控制权:

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

因此,我想知道如果您从正常构建计划中发布工件而不是从部署项目中发布工件,那么您是否会有更大的灵活性,并且只是在部署项目任务开始时从该工具中下载了工件。< / p>

不是真正的解决方案 - 只需要查看一些可能有帮助的事情。

答案 1 :(得分:1)

根据Bamboo Artifacotry plugin official page,还没有适用于Bamboo 6.0的插件(但是对于Bamboo 5.15)。 但是,如果您使用成绩任务进行发布,则不会使用Bamboo插件。

答案 2 :(得分:1)

看起来有一个针对Bamboo Server版本6+的更新,位于此处: https://marketplace.atlassian.com/plugins/org.jfrog.bamboo.bamboo-artifactory-plugin/server/overview

但是,我现在正在尝试使用Atlassian Bamboo版本6.3.2 build 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文件,它建议只使用通用的解析任务,但仍然没有运气。