我是不熟悉GitLab CI / CD作业的人,但是我试图建立一个Python脚本,当将其推送到GitLab时,它会触发CI / CD作业来运行它,并调用一个内部函数来再次推送到GitLab只要满足某些条件。因此,例如,假设我有以下内容:
def hasFileInDirectory():
# checks if the current directory has at least 1 other file in it
if (1 or more files exist):
print 'Great! You have enough files!';
else:
print 'Oh no! You need more files! Let me create one!';
createFile('missingFile'+str(random.randint(0,1000000)+'.txt');
os.system('git add -A');
os.system('git commit -m "Automatically added new file..."');
os.system('git push origin HEAD:master --force');
如果我自己从命令行运行此函数,则该函数似乎运行得很好,但是,它似乎无法在GitLab CI / CD作业中运行。我得到的输出是:
remote: You are not allowed to upload code.
fatal: unable to access 'https://gitlab-ci-token:xxxxx@gitlab.com/path_to/my_repository.git/': The requested URL returned error: 403
当我致电git push
时会发生此错误,所以我想知道如何解决此问题。我真的很感谢您的帮助!
答案 0 :(得分:5)
GitLab CI运行程序还不能推送回购协议:存在proposal in progress here。
与此同时,您可以use an SSH URL,并使用:
或者,作为mentioned here,您可以在个人资料的“设置”中使用“个人访问令牌”。
我使用范围api创建了令牌并在管道中进行配置。
在gitlab控制台中打开项目,转到“设置”>“ CI / CD”>“秘密变量”,创建一个值为key(在配置文件中生成)的变量。
我将“ $ {CI_JOB_TOKEN}”替换为变量“ $ {VAR01}”。
使用gitlab-ci.yml
script: - url_host=`git remote get-url origin | sed -e "s/https:\/\/gitlab-ci-token:.*@//g"` - git remote set-url origin "https://gitlab-ci-token:${CI_TAG_UPLOAD_TOKEN}@${url_host}"
CI_TAG_UPLOAD_TOKEN
是Secret变量
答案 1 :(得分:2)
我们最终使用的命令是:
git tag my-new-tag
git push --repo=git@YOUR_REPO_URL:YOUR_GROUP/YOUR_PROJECT.git --tags
默认情况下,我们得到:
remote: You are not allowed to upload code.
fatal: unable to access 'https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@YOUR_REPO_URL:YOUR_FORK/YOUR_PROJECT.git/': The requested URL returned error: 403`
的原因是因为CI转轮执行GIT中的命令使用HTTPS协议与令牌通过@VonC指出,不支持推。
我们已经配置了转轮共享一个体积与/root/.ssh
目录。因此,使用git
协议和适当的ssh
配置我们能够推使用Gitlab CI转轮GIT中的命令。
在gitlab
浇道exectuded如下(I除去清楚的目的无用参数)
docker exec -it gitlab-runner.service gitlab-runner register \
--non-interactive \
--name `hostname` \
--url "some-gitlab-url" \
...
--executor "docker" \
--limit "1" \
--docker-image "debian" \
--docker-volumes "/var/run/docker.sock:/var/run/docker.sock" \
--docker-volumes "/fs1/runner/builds:/builds" \
--docker-volumes "/fs1/runner/cache:/cache" \
--docker-volumes "/fs1/runner/profile:/root" \
因此,/root
目录在我们所有的跑步者共享。因此一旦与正确配置/root/.ssh/
适当键和这些键具有向右push
至gitlab,它将如上所述工作。