continuous-integration - 使用部署 token 发布到 Gitlab 包注册表

标签 continuous-integration gitlab package-managers codefresh

我创建了一个 Codefresh 管道来将工件部署到 Gitlab 包注册表。源代码也在 Gitlab 中。

我可以使用 Gitlab 个人访问 token 发布我的工件,但是当我尝试使用 Gitlab 部署 token 执行此操作时,它会失败(401 未经授权的错误),无论我是否使用 Codefresh。

我已经使用 Gradle 定义了这个,发布到 Gitlab Package Registry:

    repositories {
        maven {
            url "https://gitlab.com/api/v4/projects/<group_id>/packages/maven"
            credentials(HttpHeaderCredentials) {
                name = "Private-Token"
                value = '<private_token>'
            }
            authentication {
                header(HttpHeaderAuthentication)
            }
        }
    }

我用对了<group_id><private_token>值,出于安全原因,它们已在此处更改。

如果我在 <private_token> 中提供我的个人访问 token ,我可以毫无问题地发布到 Gitlab Package Registry。但是当我使用生成的部署 token 时,它失败了。我的个人访问 token 和部署 token 都具有相同的名称和用户名(在部署 token 的情况下)。

我收到 401 未经授权的错误:

* What went wrong:
Execution failed for task ':publishMavenJavaPublicationToMavenRepository'.
> Failed to publish publication 'mavenJava' to repository 'maven'
   > Could not write to resource 'https://gitlab.com/api/v4/projects/<group_id>/packages/maven/mypackageroute/mypackage/0.1/mypackage-0.1.jar'.
      > Could not PUT 'https://gitlab.com/api/v4/projects/<group_id>/packages/maven/mypackageroute/mypackage/0.1/mypackage-0.1.jar'. Received status code 401 from server: Unauthorized

有谁知道我做错了什么? 非常感谢

最佳答案

主要问题是,在您的 Gradle 脚本中,您使用基于 header 的身份验证,而您需要使用基本身份验证。

为了让 gradle publish with deploy tokens 工作,你必须使用 PasswordCredentials + basic(BasicAuthentication):

repositories {
        maven {
            url "https://gitlab.com/api/v4/projects/<project_id>/packages/maven"
            credentials(PasswordCredentials) {
                username = <username>
                password = <password>
            }
            authentication {
                basic(BasicAuthentication)
            }
        }
    }

关于continuous-integration - 使用部署 token 发布到 Gitlab 包注册表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64140813/

相关文章:

continuous-integration - 使用 Teamcity REST API 创建 vcs root

使用 Junit5 进行 Gradle 多项目集成测试

Git无法连接Gitlab,SSH验证错误

Flutter 分析发现 Gitlab CI/CD 管道中存在本地未发现的问题

android - 在不使用 SD 卡的情况下从另一个 Android 应用程序安装 apk

continuous-integration - 代理运行我们不知道的未知构建

svn - 使用 Team City 从 SVN 中 check out 一个文件

在 Windows 上使用 Bash 的 Gitlab

macos - 如何使用终端在 Mac 上安装库(mysql 连接器 cpp)并使事情变得像 Ubuntu 一样简单

vue.js - 如何在没有 monorepo 的情况下在多个 vue 应用程序中组织代码(组件)共享