Continuous integration 使用部署令牌发布到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

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

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

我已经使用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)
            }
        }
    }
存储库{
马文{
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)
        }
    }
}