标签: gitlab-ci

来自gitlab-ci的状态不再出现在gitlab合并请求中

就我所知,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服务器的一些简单使用.

ruby ruby-on-rails gitlab gitlab-ci

12
推荐指数
1
解决办法
407
查看次数

构建之后的测试将在gitlab-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 gitlab-ci gitlab-ci-runner

12
推荐指数
1
解决办法
2134
查看次数

gitlab如何决定将哪个跑步者用于工作

如果项目有多个可用的跑步者,gitlab ci如何决定使用哪个跑步者?

我有一个omnibus gitlab 8.6.6-ee安装,配置了2个跑步者.跑者是相同的(docker图像,配置等),除了它们在不同的计算机上运行.

如果他们都是空闲的,那么他们中的任何一个都可以运行,哪个会运行?

gitlab gitlab-ci gitlab-ci-runner gitlab-omnibus

12
推荐指数
1
解决办法
1827
查看次数

$ gitlab ci脚本在哪?允许非零

在我们的项目中,我们有一个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

bash gitlab-ci

12
推荐指数
2
解决办法
6491
查看次数

通过bash命令设置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)

bash gitlab-ci

12
推荐指数
3
解决办法
5385
查看次数

Gitlab DOCKER_AUTH_CONFIG 不工作

以下是我的 .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 docker gitlab-ci gitlab-ci-runner

12
推荐指数
6
解决办法
2万
查看次数

如何在gitlabci上使用if-else条件

如何在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循环)的文档?

if-statement gitlab-ci

12
推荐指数
4
解决办法
1万
查看次数

Gitlab:如何在构建后的后续作业中使用工件

我一直在尝试制作一个 GitLab CI/CD 管道来部署我的 MEAN 应用程序。我有三个阶段:1. 测试 2. 构建 3. 部署

构建阶段有一个生成工件的 build_angular 作业。现在我想在下一阶段使用这个工件,即部署。部署作业告诉我它已下载工件(已附加图像),但现在我想提取此工件,但我不知道工件下载到哪里。

文档中的任何地方都没有提到正在下载工件的路径。 如果

gitlab gitlab-ci

12
推荐指数
2
解决办法
1万
查看次数

无法使用 Puppeteer -- 错误:无法启动 chrome

这是我得到的错误。当测试代码在 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:无法打开共享对象文件:否这样的文件或目录

node.js gitlab-ci puppeteer

12
推荐指数
2
解决办法
2万
查看次数

为什么我在 Gitlab 合并请求中收到“管道因用户未经验证而失败”和“分离的合并请求管道”?

当非所有者开发人员将分支推送到我们的 Gitlab 存储库时,它会返回一条“管道失败”消息,其中包含详细信息“管道由于未验证用户而失败”。在开发人员的帐户上,他收到添加信用卡以验证他是否有资格获得免费管道分钟的提示。

但是我没有设置任何管道 - 我的 repo 中没有 gitlab-ci.yml 文件,新分支也没有。Gitlab 上项目的 CI/CD 选项卡下没有作业或计划。那么为什么有一个标记说分支在管道中失败了呢?

pipeline gitlab gitlab-ci gitlab-ci-runner gitlab-pipelines

12
推荐指数
4
解决办法
3444
查看次数