所以我正在尝试使用 goreleaser 来完成 gitlab(私人仓库)上的个人项目,但在构建过程中我被这个错误阻止了:
⨯ 31秒后释放失败 error=scmreleases: failed 发布工件:GET https://gitlab.com/api/v4/projects/night-gold/PROJECT/releases/0.0.10: 401 {消息:401 未经授权}
如你所见,我在 gitlab.com,所以我没有在 goreleaser.yml 中设置 gitlab_urls,因为我应该使用默认值。
我的gitlabci.yml:
stages:
- release
release:
stage: release
image:
name: goreleaser/goreleaser
entrypoint: ['']
only:
- tags
variables:
# Disable shallow cloning so that goreleaser can diff between tags to
# generate a changelog.
GIT_DEPTH: 0
GITLAB_TOKEN: $GITLAB_TOKEN
script:
- goreleaser release --clean
我的 goreleaser.yml:
project_name: PROJECTNAME
version: 1
before:
hooks:
- go mod tidy
builds:
- env: [CGO_ENABLED=0]
goos:
- linux
goarch:
- amd64
- arm64
archives:
- format: tar.gz
# this name template makes the OS and Arch compatible with the results of `uname`.
name_template: >-
{{ .ProjectName }}_
{{- title .Os }}_
{{- if eq .Arch "amd64" }}x86_64
{{- else if eq .Arch "386" }}i386
{{- else }}{{ .Arch }}{{ end }}
{{- if .Arm }}v{{ .Arm }}{{ end }}
changelog:
sort: asc
filters:
exclude:
- "^docs:"
- "^test:"
我按照文档中所写的那样生成了具有 api 权限的令牌,但它不起作用,更准确地说,该令牌具有维护者角色,我测试了它是否可以执行某些操作。
我在这里缺少什么?
编辑:
我目前找到了一些东西,goreleaser使用的url是这样的:
https://gitlab.com/api/v4/projects/User/Project_Name/releases/0.0.11
经过多次测试,我发现这种类型的 url 不起作用... gitlab.com/api/ 采用项目 ID 而不是 User/Project_Name,就我而言,它并不是真正的 401,我得到的是 404因为它的目标是一个不存在的 URL...
仍在寻找是否有解决方案。
尝试将其添加到您的 .goreleaser.yaml 中:
gitlab_url: API:$GITLAB_REPO/api/v4/