Continuous integration 使用部署令牌发布到Gitlab包注册表
我已经创建了一个Codefresh管道来将工件部署到Gitlab包注册表。源代码也在Gitlab中 我可以使用Gitlab个人访问令牌发布我的工件,但是当我尝试使用Gitlab部署令牌发布工件时,它失败了(401未经授权的错误),无论我是否使用Codefresh 我已经使用Gradle定义了这个,以发布到Gitlab包注册表:Continuous integration 使用部署令牌发布到Gitlab包注册表,continuous-integration,gitlab,package-managers,codefresh,Continuous Integration,Gitlab,Package Managers,Codefresh,我已经创建了一个Codefresh管道来将工件部署到Gitlab包注册表。源代码也在Gitlab中 我可以使用Gitlab个人访问令牌发布我的工件,但是当我尝试使用Gitlab部署令牌发布工件时,它失败了(401未经授权的错误),无论我是否使用Codefresh 我已经使用Gradle定义了这个,以发布到Gitlab包注册表: repositories { maven { url "https://gitlab.com/api/v4/pr
repositories {
maven {
url "https://gitlab.com/api/v4/projects/<group_id>/packages/maven"
credentials(HttpHeaderCredentials) {
name = "Private-Token"
value = '<private_token>'
}
authentication {
header(HttpHeaderAuthentication)
}
}
}
存储库{
马文{
url“https://gitlab.com/api/v4/projects//packages/maven"
凭证(HttpHeaderCredentials){
name=“专用令牌”
值=“”
}
认证{
标头(HttpHeaderAuthentication)
}
}
}
我使用正确的
和
值,出于安全原因,它们在这里被更改
如果我在
中提供我的个人访问令牌,我可以毫无问题地发布到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
*出了什么问题:
任务“:PublishMavenJavaPublicationToEventRepository”的执行失败。
>未能将发布“mavenJava”发布到存储库“maven”
>无法写入资源的https://gitlab.com/api/v4/projects//packages/maven/mypackageroute/mypackage/0.1/mypackage-0.1.jar'.
>放不下https://gitlab.com/api/v4/projects//packages/maven/mypackageroute/mypackage/0.1/mypackage-0.1.jar'. 从服务器收到状态代码401:未经授权
有人知道我做错了什么吗?
非常感谢主要问题是,在gradle脚本中,您使用基于头的身份验证,而需要使用基本身份验证 为了让gradle publish与deploy令牌一起工作,您必须使用
PasswordCredentials
+basic(基本身份验证)
:
存储库{
马文{
url“https://gitlab.com/api/v4/projects//packages/maven"
凭证(密码凭证){
姓名=
密码=
}
认证{
基本(基本认证)
}
}
}
使用时,您需要将名称设置为“部署令牌”
,即
存储库{
马文{
url“https://gitlab.com/api/v4/projects//packages/maven"
凭证(HttpHeaderCredentials){
name=“部署令牌”
值=“”
}
认证{
标头(HttpHeaderAuthentication)
}
}
}
专用令牌
用于个人访问令牌,而作业令牌
用于CI访问令牌
请注意,name
是添加到http请求中的头的名称,与令牌本身的名称或用户名无关。我也遇到了同样的问题,我最终使用了一个“假”Gitlab用户从Codefresh CI获得的个人访问令牌。类似“CI用户”的东西。谢谢!我想我是通过一个解决方法让它工作的,我已经很久没有遇到这个问题了。无论如何谢谢你!
repositories {
maven {
url "https://gitlab.com/api/v4/projects/<project_id>/packages/maven"
credentials(PasswordCredentials) {
name = <username>
password = <password>
}
authentication {
basic(BasicAuthentication)
}
}
}
repositories {
maven {
url "https://gitlab.com/api/v4/projects/<group_id>/packages/maven"
credentials(HttpHeaderCredentials) {
name = "Deploy-Token"
value = '<deploy_token>'
}
authentication {
header(HttpHeaderAuthentication)
}
}
}