就我所知,Gitlab-CI完美地运作.它运行并尽一切可能,但gitlab本身并没有显示状态.
我一直看到的是"检查x的CI状态",旋转器静止不动.
我得到的唯一线索来自gitlab production.log,当我打开页面时:
OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed):
app/models/project_services/gitlab_ci_service.rb:39:in `commit_status'
app/controllers/projects/merge_requests_controller.rb:165:in `ci_status'
app/controllers/application_controller.rb:57:in `set_current_user_for_thread'
Run Code Online (Sandbox Code Playgroud)
这至少可以说是奇怪的.其他一切都很好,所以整个gitlab看起来并不全面.
Gitlab详细信息:
GitLab 6.6.4
GitLab Shell 1.8.4
GitLab API v3
Ruby 1.9.3p194
Rails 4.0.3
GitLab CI 4.3.0 267edb0
Run Code Online (Sandbox Code Playgroud)
我四处搜索,没有发现类似的问题.这令人费解,因为它在gitlab中从6.something升级到6.6.4后停止工作.这不是一个关键部分,但删除了CI服务器的一些简单使用.
我有以下配置为.gitlab-ci.yml,但我在成功传递构建阶段后发现(这将创建一个名为venv的virtualenv),似乎在测试阶段你会得到一个全新的环境(没有venv目录在所有).所以我想我应该将setup脚本放在before_script中,因为它会在每个阶段运行(build/test/deploy).这是一种正确的方法吗?
before_script:
- uname -r
types:
- build
- test
- deploy
job_install:
type: build
script:
- apt-get update
- apt-get install -y libncurses5-dev
- apt-get install -y libxml2-dev libxslt1-dev
- apt-get install -y python-dev libffi-dev libssl-dev
- apt-get install -y python-virtualenv
- apt-get install -y python-pip
- virtualenv --no-site-packages venv
- source venv/bin/activate
- pip install -q -r requirements.txt
- ls -al
only:
- master
job_test:
type: test
script:
- ls -al
- source venv/bin/activate
- cp crawler/settings.sample.py crawler/settings.py …Run Code Online (Sandbox Code Playgroud) 如果项目有多个可用的跑步者,gitlab ci如何决定使用哪个跑步者?
我有一个omnibus gitlab 8.6.6-ee安装,配置了2个跑步者.跑者是相同的(docker图像,配置等),除了它们在不同的计算机上运行.
如果他们都是空闲的,那么他们中的任何一个都可以运行,哪个会运行?
在我们的项目中,我们有一个shell脚本,用于为后续构建过程设置环境变量或运行构建的应用程序.
它包含一个块,用于检查已设置的变量并进行一些调整.
# part of setup.sh
for LIBRARY in "${LIBRARIES_WE_NEED[@]}"
do
echo $LD_LIBRARY_PATH | \grep $LIBRARY > /dev/null
if [ $? -ne 0 ]
then
echo Adding $LIBRARY
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$LIBRARY
else
echo Not adding $LIBRARY
fi
done
Run Code Online (Sandbox Code Playgroud)
即它检查库的路径是否已经存在$LD_LIBRARY_PATH,如果没有,则添加它.(公平地说,这可能是不同的写入(喜欢这里),但假设脚本应该实现的东西,这是非常难做到不调用程序,检查$?,然后要么做一件事或做另一件事).
该.gitlab-ci.yml则包含
before_script:
- yum install -y <various packages>
- source setup.sh
Run Code Online (Sandbox Code Playgroud)
但是$?,当if-statement决定添加路径时,运行器决定停止前脚本的非零时刻$LD_LIBRARY_PATH.现在很高兴gitlab运行器检查$?我的脚本的每一行之后,但是如果这些行.gitlab-ci.yml被认为是原子的,那就太好了.
有没有办法避免在$?源自的脚本中进行中间检查.gitlab-ci.yml?
variables:
CUSTOM_NODE_VERSION: '$${cat .nvmrc}'
Run Code Online (Sandbox Code Playgroud)
我希望CUSTOM_NODE_VERSION通过.nvmrc文件的内容(位于项目根目录中)填充变量.如何在gitlab-ci.yml文件中执行此操作?
上面的例子不起作用.我也尝试过以下方法:
CUSTOM_NODE_VERSION: $(cat .nvmrc) - > (cat .nvmrc)CUSTOM_NODE_VERSION: "$(cat .nvmrc)" - > (cat .nvmrc)CUSTOM_NODE_VERSION: '$(cat .nvmrc)' - > (cat .nvmrc)CUSTOM_NODE_VERSION: ${cat .nvmrc} - >(空字符串)CUSTOM_NODE_VERSION: '${cat .nvmrc}' - >(空字符串)CUSTOM_NODE_VERSION: "${cat .nvmrc}" - >(空字符串)如果我把它放在before_script下面这样的话它是有效的:
before_script:
- CUSTOM_NODE_VERSION=$(cat .nvmrc)
Run Code Online (Sandbox Code Playgroud)
但是gitlab-ci.yml文件的以下部分无法访问它:
lint:
stage: Test
image: node:$CUSTOM_NODE_VERSION
Run Code Online (Sandbox Code Playgroud) 以下是我的 .gitlab-ci.yml
stages:
- build
variables:
DOCKER_HOST: tcp://docker:2375/
DOCKER_DRIVER: overlay2
services:
- docker:dind
build-image:
image: docker:stable
stage: build
script:
- docker build --no-cache -t repo/myimage:$CI_JOB_ID .
- docker push repo/myimage:$CI_JOB_ID
Run Code Online (Sandbox Code Playgroud)
我已经在 Gitlab 中设置了 DOCKER_AUTH_CONFIG,如下所示(包含所有匹配的可能性)
{
"auths": {
"https://index.docker.io": {
"auth": "...."
},
"https://index.docker.io/v1/": {
"auth": "..."
},
"https://index.docker.io/v2/": {
"auth": "..."
},
"index.docker.io/v1/": {
"auth": "..."
},
"index.docker.io/v2/": {
"auth": "..."
},
"docker.io/repo/myimage": {
"auth": "..."
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,每当尝试推送图像时,就会出现以下错误
$ docker push repo/myimage:$CI_JOB_ID
The push refers to repository [docker.io/repo/myimage] …Run Code Online (Sandbox Code Playgroud) 如何在gitlab-CI内部使用else条件。
我有以下代码:
deploy-dev:
image: testimage
environment: dev
tags:
- kubectl
script:
- kubectl apply -f demo1 --record=true
- kubectl apply -f demo2 --record=true
Run Code Online (Sandbox Code Playgroud)
现在我想添加一个类似这样的条件
script:
- (if [ "$flag" == "true" ]; then kubectl apply -f demo1 --record=true; else kubectl apply -f demo2 --record=true);
Run Code Online (Sandbox Code Playgroud)
有人可以提供相同的正确语法吗?gitlabci中是否有关于条件(if-else,for循环)的文档?
我一直在尝试制作一个 GitLab CI/CD 管道来部署我的 MEAN 应用程序。我有三个阶段:1. 测试 2. 构建 3. 部署
构建阶段有一个生成工件的 build_angular 作业。现在我想在下一阶段使用这个工件,即部署。部署作业告诉我它已下载工件(已附加图像),但现在我想提取此工件,但我不知道工件下载到哪里。
这是我得到的错误。当测试代码在 Gitlab CI 中运行时会发生这种情况。
但是,它在本地运行良好。有人请帮忙吗?
2036 $ npm test
Run Code Online (Sandbox Code Playgroud)
2037 > 10_auth@1.1.3 测试/builds/brhanuh/domestic-repair
2038 > jest --coverage 'unitTests/'
2039 错误:无法启动 Chrome!
2040 /builds/brhanuh/domestic-repair/node_modules/puppeteer/.local-chromium/linux-686378/chrome-linux/chrome:加载共享库时出错:libX11-xcb.so.1:无法打开共享对象文件:否这样的文件或目录
当非所有者开发人员将分支推送到我们的 Gitlab 存储库时,它会返回一条“管道失败”消息,其中包含详细信息“管道由于未验证用户而失败”。在开发人员的帐户上,他收到添加信用卡以验证他是否有资格获得免费管道分钟的提示。
但是我没有设置任何管道 - 我的 repo 中没有 gitlab-ci.yml 文件,新分支也没有。Gitlab 上项目的 CI/CD 选项卡下没有作业或计划。那么为什么有一个标记说分支在管道中失败了呢?