Warm tip: This article is reproduced from serverfault.com, please click

continuous integration-使用部署令牌发布到Gitlab软件包注册表

(continuous integration - Publishing to Gitlab Package Registry with Deploy Tokens)

发布于 2020-09-30 15:24:49

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

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

我已经使用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>,则可以毫无问题地发布到Gitlab软件包注册表。但是,当我使用生成的部署令牌时,它会失败。我的个人访问令牌和部署令牌都具有相同的名称和用户名(对于部署令牌)。

我收到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

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

Questioner
jbr.swork
Viewed
11
Dirk Bolte 2020-11-30 18:20:44

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

为了使gradle发布和部署令牌正常工作,你必须使用PasswordCredentials+ basic(BasicAuthentication)

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