将多个工件的受控发布到 Artifactory(如果已发布则跳过)

Controlled Publishing to Artifactory for multiple artifacts (skipped if already published)

我的项目中有一个动态生成的出版物列表。 我想问一下,如果其中一个有错误,是否有办法对每个出版物进行 try catch 以继续。 原因是不是所有的版本都递增,也不应该递增,所以我只想推送那些还不存在的。 我正在考虑在发布阶段或动态生成发布时执行此操作。

假设我有任务 publish_1、publish_2、publish_3 我想确保即使 publish_1 和 publish_2 失败,publish_3 仍然会发生。

我想控制失败的原因是文件是否已经发布。 另一种选择是我先以某种方式查询 artifactory 以查看文件是否存在(不知道该怎么做)。

这是我的出版物的想法是这样的:

HashMap<String,ProtoFile> artifacts = new HashMap<String,ProtoFile>()
List<String> thePublications = new ArrayList<String>()

publishing {
  artifacts.values().each() { f ->
    def pubName = "publish_"+f.name
    publications.create(pubName, MavenPublication) {
      groupId = f.groupId
      artifactId = f.artifactId
      version = f.version
      artifact(file("build/distributions/" + f.zipFileName))
      thePublications.add(pubName)
    }
  }
}

    deploy {
      publications thePublications.toArray(new String[thePublications.size()])
    }

我没有得到我想要的,所以我会保持打开状态,但最终找到了一种方法来完成这项工作,只需检查文件是否存在于 artfiactory 中

def addPublication(publicationName, fileProperties, artifactoryPublications) {
  final String artifactBaseUrl = 'https://your.repo.here/artifactory'
  final String artifactFile = fileProperties.artifactGroupUrl + '/' + fileProperties.artifactId + '/' + fileProperties.version + '/' +  fileProperties.zipFileName

  Artifactory artifactory = ArtifactoryClientBuilder.create()
          .setUrl(artifactBaseUrl)
          .build()

  ItemHandle result = artifactory.repository('/local-m2-development/').file(artifactFile)

  try {
    result.info();
    println fileProperties.zipFileName + " is being skipped because it's already in artifactory with version " + fileProperties.version
  } catch(Exception e) {
    artifactoryPublications.add(publicationName)
  }
}