在我的CI管道中,我正在生成一个工件public/graph.png
,该工件可视化了我的代码的某些方面。在以后的步骤中,我想将其从CI管道中提交给仓库。这是.gitlab-ci.yml
的相关部分:
commit-graph:
stage: pages
script:
- git config user.email "cipipeline@example.com"
- git config user.name "CI Pipeline"
- cd /group/project
- mv public/graph.png .
- git add graph.png
- git commit -m "committing graph.png [ci skip]"
- echo $CI_COMMIT_REF_NAME
- git push origin HEAD:$CI_COMMIT_REF_NAME
当管道在gitlab中运行时,失败并显示:
$ git config user.email“ cipipeline@dhgitlab.dunnhumby.co.uk”
$ git config user.name“ CI管道”
$ cd / group / project
$ mv public / graph.png。
$ git add graph.png
$ git commit -m“ committing graph.png [ci skip]”
[分离的HEAD 22a50d1]提交graph.png [ci跳过]
已更改1个文件,0个插入(+),0个删除(-)
创建模式100644 graph.png
$ echo $ CI_COMMIT_REF_NAME
杰米/我的分支
$ git push origin HEAD:$ CI_COMMIT_REF_NAME
严重:无法访问“ https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@example.com/group/project/project.git/”:服务器证书验证失败。 CAfile:/etc/ssl/certs/ca-certificates.crt CRLfile:无
不确定我在做什么错,并且对SSL的了解不足以理解该错误。有人可以建议吗?
我们正在自己托管gitlab。
答案 0 :(得分:3)
解决了。在推送之前发出git config --global http.sslverify "false"
可解决该特定问题(它暴露了另一个问题,但这是另一个线程:))
答案 1 :(得分:1)
我发现此GitLab forum链接很有帮助 根据用户的建议,您需要生成SSH密钥,将其与专门用于此工作的新GitLab用户关联,并将密钥添加到运行器。小缺点是您需要在gitlab中将交换源用于原始ssh源(而不是在作业中使用的沙盒源),这会导致提交者更改为提到的新帐户,而不是触发管道的人。 来自链接的来源:
# for your information
whoami
printenv
# we need to extract the ssh/git URL as the runner uses a tokenized URL
export CI_PUSH_REPO=`echo $CI_BUILD_REPO | perl -pe 's#.*@(.+?(\:\d+)?)/#git@\1:#'`
# runner runs on a detached HEAD, create a temporary local branch for editing
git checkout -b ci_processing
git config --global user.name "My Runner"
git config --global user.email "runner@gitlab.example.org"
git remote set-url --push origin "${CI_PUSH_REPO}"
# make your changes
touch test.txt
# push changes
# always return true so that the build does not fail if there are no changes
git push origin ci_processing:${CI_BUILD_REF_NAME} || true
仅在当前版本的GitLab上,您需要如下更改源变量名称:
export CI_PUSH_REPO=`echo $CI_REPOSITORY_URL | perl -pe 's#.*@(.+?(\:\d+)?)/#git@\1:#'`
答案 2 :(得分:0)
我可以根据tsr的答案https://stackoverflow.com/a/57800614/5269825从Gitlab-CI与选定的用户进行较小的更改:
# set remote URL to https://oauth2:<AccessToken>@server.com/project.git
CI_PUSH_REPO=`echo "$CI_REPOSITORY_URL $ACCESS_TOKEN_PARAM" | sed 's/^.*\(@.*\)\s\(.*\)/https:\/\/oauth2:\2\1/g'`
git config http.sslverify false
git remote set-url --push origin "${CI_PUSH_REPO}"
git config user.name "Token Owner"
git config user.email "tokenowner@email.com"
# runner runs on a detached HEAD, create a temporary local branch for editing
git checkout -b ci_processing
# make your changes
# push changes
# always return true so that the build does not fail if there are no changes
git push origin ci_processing:${CI_BUILD_REF_NAME} || true
ACCESS_TOKEN_PARAM
必须在项目的CI / CD变量配置中进行配置。
使用Oauth2和访问令牌的想法来自https://stackoverflow.com/a/52074198/5269825和https://stackoverflow.com/a/52154378/5269825。
此外,推动更改可以触发新的渠道!
答案 3 :(得分:0)
在我的情况下,deploy keys选项与Gitlab Shell Runner是最佳的(与个人令牌或CI令牌相比-仅支持基本身份验证)。万一有人在努力从Gitlab CI推送到,则可以通过与Gitlab服务器共享运行程序的公钥来完成
答案 4 :(得分:0)
您可以将CI_SERVER_CLS_CA_FILE
添加到sslCAInfo
git config中。
checkout alchemy:
stage: prepare
script:
- git config --global "http.${CI_SERVER_URL}.sslCAInfo" "$CI_SERVER_TLS_CA_FILE"
- git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@${CI_SERVER_HOST}/sparklemuffin/alchemy.git
在从管道克隆其他存储库时,我遇到了同样的问题。服务器证书验证失败,失败。我不明白为什么会这样,Gitlab本身克隆了存储库而没有任何问题。因此,我设置了CI_DEBUG_TRACE: "true"
并发现,Gitlab创建了此文件,将git配置为使用它来最初克隆存储库。由于某种原因,此配置以后将不再可用。 CI_SERVER_TLS_CA_FILE
仍然存在。