[英]Publishing to Gitlab Package Registry with Deploy Tokens
我創建了一個 Codefresh 管道來將工件部署到 Gitlab 包注冊表。 源代碼也在 Gitlab 中。
我可以使用 Gitlab 個人訪問令牌發布我的工件,但是當我嘗試使用 Gitlab 部署令牌進行發布時,無論我是否使用 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 包注冊表。 但是當我使用生成的部署令牌時,它會失敗。 我的個人訪問令牌和部署令牌都具有相同的名稱和用戶名(在部署令牌的情況下)。
我收到 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
有誰知道我做錯了什么? 非常感謝
使用部署令牌時需要將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 請求的 header 的名稱,與 token 本身的名稱或用戶名無關。
主要問題是在您的 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)
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.