在我的gitlab ci管道中,我想在管道为master分支运行的任何地方推送标签。但是问题是我无法将代码推送到存储库中。
我正在尝试使用GITLAB_TOKEN推送git标签
image:
name: X
entrypoint: [""]
stages:
- deploy
deploy:
stage: deploy
script:
# Generating new tag version using stk utility
- git config --global user.email $USER_MAIL
- git config --global user.name $USER_NAME
- git config --global http.postBuffer 52428800
- git remote set-url origin https://$USER_NAME:$GITLAB_TOKEN@${CI_PROJECT_URL:8}
- export NEW_TAG_VERSION=<generating new git tag>
- echo $NEW_TAG_VERSION
- if [ $CI_COMMIT_REF_NAME == "master" ]; then \
- git tag -a v$NEW_TAG_VERSION -m "[skip ci] new tag"; \
- git tag --list; \
- git push origin --tags; \
# I have also tried the command given below
# - git push origin HEAD:$CI_COMMIT_REF_NAME v$NEW_TAG_VERSION; \
- else \
- echo "non-master"; \
- fi
但是问题是,当我尝试按下标签时,会出现此错误
error: RPC failed; result=22, HTTP code = 404
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
答案 0 :(得分:2)
我们遇到了同样的问题,但是使用 after_script 或 SSH 不能满足我们的要求。
这是我们的解决方案概述:
详细信息:
image: alpine
stages:
- build
- test
- package
make:
stage: build
script:
- env
- echo "complete" > complete.txt
artifacts:
paths:
- complete.txt
# All dependent jobs must include conditions of the parent job to
# avoid pipeline entry with gitlab-ci.yml error upon code commit.
#
only:
- schedules
test1:
stage: test
script:
- echo "test1"
needs:
- job: make
artifacts: true
only:
- schedules
# Other tests follow test1 structure
build_rpms:
stage: package
script:
- echo "Build RPMs. Add tag v1.9d"
- apk add git
- git config --list
# --force is needed for both tag and push to allow job replay
- git tag v1.9d --force
# Enable pushing from CI pipeline:
#
# At that point git origin points to CI_REPOSITORY_URL=
# https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/acme/my-project.git
# This setup does not allow modifications (i.e git push will be rejected).
#
# Setting SSH environment is what many developers do to execute git commands here,
# but it is complex and requires submitting SSH private keys to Gitlab (cringe).
#
# Private Gitlab tokens are deprecated.
#
# We use Gitlab Personal Access Token with 'write' access. This token shall
# be generated via Gitlab user settings and then it shall be added as a masked
# environment variable for this project CI settings.
#
# Use "oauth2" as user. For example for CI_PROJECT_URL=https://gitlab.com/acme/my-project
# set origin to https://oauth2:wSHnMvSmYXtTfXtqRMxs@gitlab.com/acme/my-project.git
#
- git remote set-url origin ${CI_PROJECT_URL/gitlab.com/oauth2:${PERSONAL_ACCESS_TOKEN}@gitlab.com}.git
- git remote -v
# Don't trigger pipeline again:
# -o ci.skip is not well known Gitlab Git option which allows skipping new CI.
# Without ci.skip option CI would be triggered recursively by tag push.
#
- git push origin v1.9d --force -o ci.skip
when:
manual
我们的目标是将标签作为build-rpm工作的一部分, 应该作为多阶段CI的一部分手动启动 管道。
可以按计划或手动启动管道。
必须能够从git commit时间戳生成唯一标记。
更新2020年6月:
GitLab功能解决管道中推入标签的新截止日期是2020年7月22日:
https://gitlab.com/gitlab-org/gitlab/-/issues/16290#note_357065731
答案 1 :(得分:1)
上述问题是由于我要推送git tag
的回购网址所致。
此问题已通过在回购网址中添加.git
扩展名得以解决,示例如下:
git remote set-url origin https://$USER_NAME:$GITLAB_TOKEN@${CI_PROJECT_URL:8}.git