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



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

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

我已经使用Gradle定义了这一点,以发布到Gitlab软件包注册表:

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 Package Registry。但当我使用生成的Deploy 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脚本中,您使用基于头部的身份验证,而需要使用基本身份验证。

为了让带有部署令牌的gradle发布工作,您必须使用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)
}
}
}

使用部署令牌(即(时,需要将name设置为"Deploy-Token"

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请求的头的名称,与令牌本身的名称或用户名无关。

相关内容

  • 没有找到相关文章

最新更新