我创建了一个 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/