首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Deploy令牌发布到Gitlab包注册表

使用Deploy令牌发布到Gitlab包注册表
EN

Stack Overflow用户
提问于 2020-09-30 23:24:50
回答 2查看 1.6K关注 0票数 2

我已经创建了一个Codefresh管道来将一个工件部署到Gitlab Package Registry。源代码也在Gitlab中。

我可以使用Gitlab个人访问令牌发布我的工件,但是当我尝试使用Gitlab部署令牌来发布我的工件时,它失败了(401未授权错误),无论我是否使用Codefresh。

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

代码语言:javascript
复制
    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>中提供我的个人访问令牌,我可以发布到Gitlab包注册表,而不会出现任何问题。但是当我使用生成的部署令牌时,它失败了。我的个人访问令牌和部署令牌具有相同的名称和用户名(在部署令牌的情况下)。

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

代码语言:javascript
复制
* 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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-30 18:20:45

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

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

代码语言:javascript
复制
repositories {
        maven {
            url "https://gitlab.com/api/v4/projects/<project_id>/packages/maven"
            credentials(PasswordCredentials) {
                name = <username>
                password = <password>
            }
            authentication {
                basic(BasicAuthentication)
            }
        }
    }
票数 1
EN

Stack Overflow用户

发布于 2021-03-21 01:44:58

使用deploy token时,需要将name设置为"Deploy-Token",即

代码语言:javascript
复制
repositories {
    maven {
        url "https://gitlab.com/api/v4/projects/<group_id>/packages/maven"
        credentials(HttpHeaderCredentials) {
            name = "Deploy-Token"
            value = '<deploy_token>'
        }
        authentication {
            header(HttpHeaderAuthentication)
        }
    }
}

Private-Token用于个人访问令牌,Job-Token用于CI访问令牌。

这里请注意,name是添加到http请求的头的名称,并且与令牌本身的名称或用户名无关。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64140813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档