簡體   English   中英

使用部署令牌發布到 Gitlab 包注冊表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM