1

我正在使用 Gradle 将工件部署到 Google 的工件注册表。

通常我会在文件的“发布”部分指定我想要将构建的工件部署到的存储库build.gradle- 而不是那样做,我想在init.gradle稍后在 CI 中注入的文件中定义存储库-过程,以便工件注册表的 URL 不会最终出现在 Git 存储库中。

我想出了一种方法来做到这一点:

allprojects{  
    buildscript {
        repositories {
            maven {
                url "artifactregistry://random-location.pkg.dev/project-name/repository-name"
            }
        }
    }
    repositories {
        maven {
            url "artifactregistry://random-location.pkg.dev/project-name/repository-name"
        }
    }
}

但是因为我需要 Artifact Registry Gradle 插件,所以我收到了artifactregistry不支持协议的错误。

> Could not resolve all dependencies for configuration ':classpath'.
   > Not a supported repository protocol 'artifactregistry': valid protocols are [file, http, https, gcs, s3, sftp]

文档说明要在 中使用插件init.gradle,需要插入以下内容:

initscript {
  repositories {
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {
    classpath "gradle.plugin.com.google.cloud.artifactregistry:artifactregistry-gradle-plugin:2.1.1"
  }
}
apply plugin: com.google.cloud.artifactregistry.gradle.plugin.ArtifactRegistryGradlePlugin

但我似乎无法让它工作。我一定已经尝试过这两个片段的任何可能组合,但我的知识已经结束了。

如果有人能告诉我如何安排这两个片段,以便我可以在init.gradle文件中指定要发布到的存储库(或者可能有完全不同的方法),那将非常有帮助!

4

1 回答 1

1

更新:我找到了一种让它工作的方法。

我没有指定发布存储库,而是在init.gradle文件中定义了一个变量:

allprojects {
    ext.repositoryURL = "artifactregistry://random-location.pkg.dev/project-name/repository-name"
}

后来我在构建脚本中使用了它:

publishing {
    ...
    repositories {
        maven {
            url repositoryURL
        }
    }
}

这样我仍然可以init.gradle稍后注入文件以指定注册表 URL。

于 2021-08-06T09:13:46.267 回答