在我的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。电子邮件“cipipeline@dhgitlab.dunnhumby.co.uk“
$git config user.name”CI Pipeline“
$cd/group/project
$mv public/graph.png.
$git add graph.png
$git commit-m”提交图形。png[ci skip]“
[distached HEAD 22a50d1]提交graph.png[ci skip]
1个文件更改,0个插入(),0个删除(-)
创建模式100644 graph.png
$echo$ci_COMMIT_REF_NAME
jamiet/my branch
$git push origin HEAD:$ci_COMMIT_REF_NAME
致命:无法访问”https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@例如。com/group/project/project。git/':服务器证书验证失败。CAfile:/etc/ssl/certs/ca证书。crt文件:无
我不确定自己做错了什么,对SSL了解不够,无法理解这个错误。有人能提供建议吗?
顺便说一下,我们自己也在主持gitlab。
您可以将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
@Sjoerd在评论中导出GIT_SSL_CAINFO
的方法要短一些。
export GIT_SSL_CAINFO=$CI_SERVER_TLS_CA_FILE
Gitlab创建CI_服务器\u TLS_CA_文件
,并将git配置为使用它最初克隆存储库。由于某些原因,此配置稍后不再可用。
仍然需要一些手指俯卧撑,但这里有一种不那么脆弱的从它自己的CI推送到存储库的方法,我在日常工作中使用。它直接从分离的头部推送到掌握:
SSH_PUSH_KEY
放入CI/CD变量中。确保将其设置为受保护。CI_KNOWN_HOSTS
变量,带有GitLab实例的SSH指纹(还记得ssh
问你第一次尝试连接主机的情况吗?那。)。使用ssh-keyscan
my.gitlab.instance.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArlUMUmNj59PpoLyy4EsKbwhPUfXxuAzFN7dMKDXVvKMmN8344HqQV1tRx6fcmH+0BXK1JAP4f10V0VnYti3e1c5f9dhpl8pIqKLMJgdGDq3MLqjihL3bp5xm8nDsPTm5FoEPPYK1I3M2wr18pBB19evz64NHrK5R/HO5LyTrybVasFumt8cZoH6crnCFgfQWV1mHAG3j41Q0z4yxu6g8zBWESZcVVn90HxQH7+LDHx11122233344491MQGl5fZcKqVWsWQVEssaK87iBsWUxvsuoeVUrj4YRcmbi6F4+ZZZZZZZwwww3ZboWsSWxTk5ESR6WWHccBm8GQflXyY3ZQ==
"This CI job pushes to its own repo":
stage: my_push_stage
resource_group: this_option_comes_handy_when_pushing
only:
- triggers
before_script:
- mkdir ~/.ssh/
- echo "${CI_KNOWN_HOSTS}" > ~/.ssh/known_hosts
- echo "${SSH_PUSH_KEY}" > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- git config user.email "ci@example.com"
- git config user.name "CI"
- git remote remove ssh_origin || true # Local repo state may be cached
- git remote add ssh_origin "git@$CI_SERVER_HOST:$CI_PROJECT_PATH.git"
script:
- touch "xyz" # Make an edit
- git add "xyz"
- git commit -m "My CI commit"
- git push ssh_origin HEAD:master # ❗ this pushes to master,
# use $CI_BUILD_REF_NAME if you want to push to current branch
- git tag MyCiTag # If you need to add a tag you can do that too
- git push --tags ssh_origin
我发现这个GitLab论坛链接很有用,正如用户建议的那样,您需要生成SSH密钥,将其与专门从事此工作的新GitLab用户关联,并将密钥添加到runner。一个小缺点是,您需要在gitlab中使用swap origin作为原始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_REPOSITORY_URL | 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_COMMIT_REF_NAME} || true
仅使用当前版本的GitLab,您就需要更改源变量名称,如下所示:
export CI_PUSH_REPO=`echo $CI_REPOSITORY_URL | perl -pe 's#.*@(.+?(\:\d+)?)/#git@\1:#'`
问题内容: 我正在使用使用Groovy样式脚本编写的Jenkins脚本化管道,并创建了一个Jenkinsfile来描述管道。我需要使用与git repo name相同的文件夹名称创建工作区,然后在工作区文件夹中签出代码。我的问题是,在执行之前,是否有办法知道git repo名称或git repo url? 问题答案: 这个相对丑陋的代码是我用来获取repoName的代码。关键是存储库的URL存储在
问题内容: 我有很多数据要插入(SET \ INCR)到redis DB,所以我正在寻找通过 node.js* 进行管道 \ 大量插入的操作。 * 我在node.js中找不到任何好的示例/ API,因此任何帮助都将非常有用! 问题答案: 是的,我必须同意缺少示例,但是我设法创建了一个流,在该流上我批量发送了几个插入命令。 您应该为redis流安装模块: 这就是您使用流的方式: 另外,您可以根据需要
问题内容: 在Linux终端中,当一个命令的输出太长而无法在一页中读取时,我可以这样做: 这样我就可以读取cat文件的输出并上下滚动。 如何在IPython中执行此操作? 例如,我尝试了一下,但没有成功: 我最初的问题是通过Shift + Page Up不能看到来自的输出,并且我不想更改滚动缓冲区。 问题答案: 在IPython中,您可以使用标准的寻呼机(通常是)来显示对象。另外,您可以增加终端的
我想把我的形象推广到Docker Hub。这项任务似乎很简单,但我对细节一无所知。 变量的值应该是什么,以及如何构造它?这些说明似乎可以解释,但我不明白。
我想在过滤器返回空数组时显示一条消息,例如“未找到结果” 这是我的ngFor列表,它有一个过滤器 如果没有过滤器,这很容易,但是因为有过滤器,我不知道怎么说过滤器没有返回结果。 这是我的过滤器: 这一切都有效,但我只需要向用户显示,过滤器没有返回结果,而是返回消息,而不是空屏幕。
问题内容: 如何在node.js中创建命名管道? PS:目前,我正在按如下方式创建命名管道。但是我认为这不是最好的方法 问题答案: 看起来,Node核心不支持名称管道-从Ben Noordhuis 11/10/11开始: Windows具有命名管道的概念,但是自您提到以来,我假设您的意思是UNIX FIFO。 我们不支持它们,可能永远也不会(在非阻塞模式下的FIFO可能会死锁事件循环),但是如果您