标签: gitlab-ci-runner

如何在.gitlab-ci.yml中的docker容器中安装卷?

我在.gitlab-ci.ymlAndroid项目中使用和docker作为GitLab CI运行器.在测试运行结束时,gradlew将测试结果保存在构建目录下的xml和html中:

Finished generating test XML results (0.001 secs) into: /builds/org/project/sdk/build/test-results/release
 Generating HTML test report...
Finished generating test html results (0.002 secs) into: /builds/org/project/sdk/build/reports/tests/release
Run Code Online (Sandbox Code Playgroud)

我想访问这些文件,但是文档没有提到如何像人们一样安装卷docker run -v <path>:/builds/org/....

docker gitlab-ci-runner

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

Gitlab-ci runner:如何在克隆存储库之前执行操作

我想知道是否可以在克隆存储库之前执行一些操作。事实上,据我所知,gitlab-ci 运行程序的第一个操作是在执行任何 脚本之前克隆要构建的存储库。

我的问题:

  • 为了构建我的项目(让我们称之为我的插件),我需要克隆另一个特定的存储库,让我们称之为工作区,然后我需要执行一些操作来配置这个工作区(使用 cmake)。
  • 完成后,我需要将我的项目放入工作区的特定子文件夹中,例如工作区文件夹/plugins/ my plugin中。
  • 然后我只需要配置我的插件(使用 cmake)和构建/测试(使用不同的 make 命令)。

直观的方法是能够在运行程序克隆我的插件之前执行早期操作。例如:

  • cd builds/命名空间/我的插件
  • git clone “工作区的git地址”
  • cd 工作区 && cmake . -D“一些定义
  • 光盘插件

=> 从这里克隆/构建/测试可以照常进行。

我知道有before_script操作,但它是在克隆之后执行的。

我还看到运行程序的全局 config.toml 文件的 [[runner]] 部分中有pre_clone_script选项,我想知道是否可以使用它。不幸的是,这意味着所有项目都将运行这个脚本,这当然不是一个好主意......

好吧,如果有人有建议,或者更好地解决这个问题,我将不胜感激!

gitlab-ci-runner

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

GitLab CI为什么这个跑步者没有进行构建?

当我推送一个新的提交时,我想从跑步者开始构建,但我得到这个消息:

这个版本卡住了,因为你没有在线任何活跃的跑步者,他们分配了这些标签:dev

转到"跑步者"页面

我安装了GitLab 8.15.2.

我在C中创建了一个基本项目,一个".gitlab-ci.yml"文件:

project1:
  tags:
    - dev
  script:
    - make
    - ./test
Run Code Online (Sandbox Code Playgroud)

(如果我删除标签,我会得到几乎相同的消息)

我创建了一个特定的跑步者

root@debian:~# gitlab-ci-multi-runner register
Running in system-mode.
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
  http://127.0.0.1
Please enter the gitlab-ci token for this runner:
  XXX
Please enter the gitlab-ci description for this runner:
  [debian]: p1
Please enter the gitlab-ci tags for this runner (comma separated):
  dev
Registering runner... succeeded                     runner=XXX
Please enter the executor: kubernetes, docker, parallels, ssh, docker+machine, docker-ssh, shell, virtualbox, docker-ssh+machine:
  shell …
Run Code Online (Sandbox Code Playgroud)

git gitlab-ci gitlab-ci-runner

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

.gitlab-ci.yml 是否可用于 Gitlab CI 中 GIT_STRATEGY=none 的作业?

Gitlab 文档说明了以下内容GIT_STRATEGY: none

none还重新使用项目工作区,但跳过所有 Git 操作(包括 GitLab Runner 的预克隆脚本,如果存在)。它对于专门对工件进行操作(例如部署)的作业最有用。Git 存储库数据可能存在,但肯定会过时,因此您应该只依赖从缓存或工件带入项目工作区的文件。

我仍然有点困惑这应该如何运作。如果不能保证源代码存在,则项目工作区中可能没有源代码,因此文件.gitlab-ci.yml也会丢失。如果没有构建脚本,作业必定会失败。如果根据外部因素,源仅部分丢失,则作业将随机失败,这比每次都失败更糟糕。但是,如果每次都失败,那么该功能还有什么意义呢?

我看到的另一种可能性是.gitlab-ci.yml可能在运行时注入,因此即使没有存储库的新副本,也会有一个构建脚本。如果是这样,我可以从存储库中定义更多文件以注入构建过程吗?这些特定工​​作有哪些限制?

gitlab-ci gitlab-ci-runner

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

在 GitLab 中取消作业后如何执行脚本?

我正在寻找一种在 GitLab 中取消作业后清理运行程序的方法。原因是我们经常不得不取消正在运行的作业,因为运行程序有时会卡在测试管道中,我可以想象一些其他场景,您希望取消作业并在之后运行清理脚本。我正在寻找类似的东西after_script,但只是在工作被取消的情况下。我检查了GitLab 关键字参考,但找不到我需要的内容。

我的以下部分gitlab-ci.yaml显示了测试阶段,我想docker-compose down在取消作业时通过调用来优雅地取消该阶段。

我使用的是单个 gitlab-runner。另外,我不使用dind。

test_stage:
  stage: test
  only:
  - master
  - tags
  - merge_requests
  image: registry.gitlab.com/xxxxxxxxxxxxxxxxxxx
  variables:
    HEADLESS: "true"
  script:
  - docker login -u="xxxx" -p="${QUAY_IO_PASSWORD}" quay.io  
  - npm install
  - npm run test
  - npm install wait-on  
  - cd example
  - docker-compose up --force-recreate --abort-on-container-exit --build traefik frontend &
  - cd ..
  - apt install -y iproute2
  - export DOCKER_HOST_IP=$( /sbin/ip route|awk '/default/ { print $3 }' ) …
Run Code Online (Sandbox Code Playgroud)

continuous-integration gitlab gitlab-ci gitlab-ci-runner

6
推荐指数
1
解决办法
6166
查看次数

CI 作业在 GitLab-runner 上间歇性失败,并出现错误“致命:浅文件自我们读取以来已更改”

我的自托管 GitLab 部署上的作业最近有时开始失败,出现以下 git 错误:

完整作业日志的示例如下:

Running with gitlab-runner 13.12.0 (v13.12.0)
  on ....50ab V...
Preparing the "shell" executor
00:00
Using Shell executor...
Preparing environment
00:00
Running on saxtons...
Getting source from Git repository
00:03
$ /nix/store/s0frm5z2k43qm66q39ifl2vz96hmyxg4-pre-clone
Fetching changes with git depth set to 50...
Reinitialized existing Git repository in /var/lib/private/gitlab-runner/builds/V.../2/privatestorage/PrivateStorageio/.git/
fatal: shallow file has changed since we read it
Cleaning up file based variables
00:00
ERROR: Job failed: exit status 1
Run Code Online (Sandbox Code Playgroud)

预克隆脚本包含此内容,用于修复不可写目录的权限,这些目录会导致运行程序尝试清理 git checkout 失败:

chmod --recursive u+rwX …
Run Code Online (Sandbox Code Playgroud)

git gitlab nixos gitlab-ci gitlab-ci-runner

6
推荐指数
1
解决办法
4911
查看次数

如何确定 Docker 容器内受限 CPU 的数量?与 make -j 一起使用

Docker 支持一个--cpus选项,限制容器使用一定比例的主机计算资源。例如,--cpus 2.5将分配相当于主机CPU能力大约两倍半的计算资源。这种分配似乎有点“逻辑”而不是物理,因为容器运行八个进程,但往往--cpus 1.0在单独的 CPU 上运行每个进程,但限制在大约 12.5%。我想这很好。

问题是我无法找到一种方法让受限容器内的进程确定它有多少个可用的等效 CPU。例如,这对于构建过程特别有用,make -j <n>但是什么是n?无论选项值如何,常用​​的nproc输出都是主机上的 CPU 数量--cpus,这使得它不适合,因为它太大了。的值/proc/cpuinfo也是主机的视图(与 相同nproc)。

有没有办法让包含的进程确定可用的 CPU 数量?

举个例子,在我的 16 核主机上,我想仅使用docker run ... --cpus 4.0 ...make -j <something>运行4 个进程,而不是 16 个进程。

FWIW,我将 Docker Executor 与 GitLab-CI 和 一起使用gitlab-runner,这就是为什么--cpuset-cpus=没有真正帮助的原因。执行器应该能够为每个作业在所有主机的 CPU 上分配一定数量的 CPU,而不是特定的子集。虽然我可以为每个显式的四个 CPU 集创建单独的执行程序,但我不知道有什么明显的方法可以将gitlab-runner这些执行程序以平衡的方式分配给传入的作业,而且我想避免将责任推到作业本身上,也许使用标签来选择执行器,因为这需要每个作业对运行器了解太多。

我确实考虑过像NUM_CPUS=4中那样设置相应的环境变量,以便构建作业可以找出要使用的环境变量,但是只能为所有跑步者设置变量,而不是单个跑步者:gitlab-runnerconfig.tomlmake …

environment limit docker gitlab-ci-runner

6
推荐指数
0
解决办法
489
查看次数

Gitlab CI/CD 合并请求 - CI_MERGE_REQUEST_SOURCE_BRANCH_NAME 和目标分支名称为空

我希望仅当有合并请求时才启动 Gitlab 管道。不在对任何分支的提交上。

only:
 refs:
  - merge_requests
changes:
  - "**/*.json"   except:
  - $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == "master"
  - $CI_COMMIT_REF_NAME == "master"
Run Code Online (Sandbox Code Playgroud)

但是当我创建合并请求时,会启动两个管道请求。一个为

  • 分离的合并请求管道:这是在创建合并请求(尚未批准)时启动的。我希望这条管道运行被阻止。但这次运行已填充所有 MR 变量。

仅供参考,我有一些设置变量值的规则,并阅读这导致了此问题。我尝试了下面提到的方法:( https://gitlab.com/gitlab-org/gitlab/-/issues/201845 ) 来阻止分离管道并且它有效。但现在我无法访问 MR 变量。

workflow:
  rules:
    - if: $CI_MERGE_REQUEST_IID
    - if: $CI_OPEN_MERGE_REQUESTS
      when: never
Run Code Online (Sandbox Code Playgroud)
  • 合并分支管道:这是在合并完成/批准后启动的。我只想启动这条管道。但在此分支上,所有合并请求变量 - CI_MERGE_REQUEST_SOURCE_BRANCH_NAME 和 CI_MERGE_REQUEST_TARGET_BRANCH_NAME 均为空。

如何实现以下目标:

阻止分离分支请求的管道运行并获取合并分支管道运行的 MR 变量?

更新 1:我在设置上启用了合并结果管道并删除了 MERGE_REQUEST_IID 规则。现在合并结果管道正在运行而不是分离,但合并结果管道在合并被批准之前正在执行?抱歉,这很令人困惑。是否有办法仅在合并获得批准后启动管道并访问该管道运行中的 MR 变量?

gitlab-ci gitlab-ci-runner

6
推荐指数
1
解决办法
6524
查看次数

Gitlab Pipeline 失败“远程:HTTP Basic:访问被拒绝”

我是 Gitlab Pipelines 的新手,想为我的一个 Python 项目设置一个。我将 docker GitLab-runner 容器与此配置文件一起使用:

version: '3'
services:
  runner:
    container_name: runner
    image: gitlab/gitlab-runner:latest
    restart: unless-stopped
    environment:
      - TZ=Europe/Berlin
    volumes:
      - ./data:/etc/gitlab-runner/
      - /var/run/docker.sock:/var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)

每当执行管道时,我都会收到以下错误消息:

Running with GitLab-runner 14.10.1 (f761588f)
  on docker xxxxxxx
Preparing the "docker" executor
Using Docker executor with image python:latest ...
Pulling docker image python:latest ...
Using docker image sha256:8dec8e39f2eca1ee1f1b668619023da929039a39983de4433d42d25a7b79267c for python:latest with digest python@sha256:567018293e51a89db96ce4c9679fdefc89b3d17a9fe9e94c0091b04ac5bb4e89 ...
Preparing environment
Running on runner-xxxxxxxxx-project-38-concurrent-0 via xxxxxxxx...
Getting source from Git repository
Fetching changes with git depth set …
Run Code Online (Sandbox Code Playgroud)

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

6
推荐指数
1
解决办法
6761
查看次数

如何设置gitlab作业同阶段的显示顺序?

我有几个作业在同一阶段按顺序运行。然而,在 GitLab UI 中,显示顺序是根据作业名称(升序)。

Job_C:
 stage: dev

Job_B:
 stage: dev
 needs: ["Job_C"]

Job_A:
 stage: dev
 needs: ["Job_B"]
Run Code Online (Sandbox Code Playgroud)

因此该作业按预期顺序运行。Job_C然后Job_B然后Job_A。然而,UI 中的作业顺序是 Job_AJob_B并且Job_C

在不更改作业名称的情况下是否可以设置显示顺序?

gitlab gitlab-ci gitlab-ci-runner

6
推荐指数
0
解决办法
516
查看次数