标签: gitlab-ci-runner

只有单一的GitLab CI Runner Building

我最近安装了GitLab并尝试使用GitLab CI.我在我的GitLab服务器中成功启用了GitLab CI并成功安装了CI Runner(在Windows上,如果这是相关的).我为Windows CI Runner启用了一个项目,当我提交到存储库时,运行器被执行,我可以看到构建.

我按照文档安装了第二个CI Runner(在Debian上).我可以看到Debian CI Runner和Windows CI Runner一起注册.Debian CI Runner分配了相同的项目.但是,当我提交存储库时,只执行Windows CI Runner,Debian CI Runner不会尝试构建.

我犯了什么错误或者有什么额外的配置才能启用它?我已经尝试重新注册Debian CI Runner但没有成功.


更新1: Debian CI Runner现在正在执行,但Windows CI Runner不是.它似乎只选择一个单一的跑步者.

更新2:升级到'GitLab CI 7.14.1 2dee1b3'但相同的行为仍然存在.

更新3:在Scientific Linux机器上添加了第三个跑步者.它已注册并分配了项目,但只执行了一个运行程序(目前是Debian CI Runner).


GitLab CI 7.12.0 e96755c

git gitlab-ci gitlab-ci-runner

7
推荐指数
1
解决办法
2733
查看次数

Gitlab CI - 部署到Heroku并运行迁移

我在gitlab.com上托管了一个Rails应用程序,我按照本指南将其配置为部署到heroku:http://docs.gitlab.com/ce/ci/examples/test-and-deploy-ruby-application- to-heroku.html.它工作正常.

我的问题是,每次部署到heroku时如何运行迁移?通过CLI进行部署时,我通常会这样做:

git push heroku master && heroku run rake db:migrate
Run Code Online (Sandbox Code Playgroud)

但是使用gitlab-ci.yml我不知道如何做到这一点......

ruby-on-rails heroku gitlab-ci gitlab-ci-runner

7
推荐指数
3
解决办法
3741
查看次数

GitLab:是否可以在特定的运行程序上运行管道?

是否可以在特定运行器上运行管道?(不使用标签)

使用可行environments,甚至可行gitlab runner exec


场景:

已有一个已有多个运行器的项目(用于注册运行器的特定项目令牌),并且具有自己的关联标签(因此也不能更改它们)。

我要添加一个新的运行器,但是需要首先对其进行测试以确保其正常工作,但是我需要强制在该机器上构建管道,而无需更改任何标签或运行器的特定项目。

gitlab gitlab-ci gitlab-ci-runner gitlab-api

7
推荐指数
2
解决办法
6673
查看次数

GitLab runner在运行管道时无法解析主机

我有一个dockerized GitLab和GitLab Runner安装,包括docker-compose.yml:

version: "3"

services:
  gitlab:
    image: gitlab/gitlab-ee:latest
    container_name: gitlab
    restart: always
    hostname: gitlab
    ports:
      - "45022:22"
      - "45080:80"
      - "45443:443"
    volumes:
      - /srv/gitlab/config:/etc/gitlab
      - /srv/gitlab/logs:/var/log/gitlab
      - /srv/gitlab/data:/var/opt/gitlab

  python-runner:
    image: gitlab/gitlab-runner:latest
    container_name: python-runner
    hostname: python-runner
    volumes:
      - /srv/python-runner/config:/etc/gitlab-runner
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - CI_SERVER_URL=http://gitlab/ci
      - RUNNER_TOKEN=myTokenCode
      - RUNNER_DESCRIPTION=Python 2.7.14
      - RUNNER_EXECUTOR=docker
      - DOCKER_IMAGE=python:2.7.14
    restart: always
Run Code Online (Sandbox Code Playgroud)

我已经注册了跑步者:

docker exec -it python-runner gitlab-runner register \
    --non-interactive \
    --url "http://gitlab/" \
    --registration-token "${GITLAB_REGISTRATION_TOKEN}" \
    --description "Python 2.7.14" \
    --executor "docker" \ …
Run Code Online (Sandbox Code Playgroud)

gitlab docker gitlab-ci-runner docker-compose

7
推荐指数
1
解决办法
4163
查看次数

如何设置带有标签的作业工件永不过期 Gitlab CI

我想知道如果提交带有标签,是否有可能将生成工件的作业设置为永不过期,否则它应该过期。目前,它在全球范围内设置为 3 天后到期。但我想要的东西是,如果提交是通过特定的操作完成的tag,并且它运行Job A生成工件,那么它永远不会过期。但对于没有标签的其他提交也应运行相同的Job A操作,并且为此生成的工件应在全局设置的时间内过期。

artifacts gitlab gitlab-ci gitlab-ci-runner

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

作业结束时出现错误“警告:将工件作为“存档”上传到协调器...失败”

我正在尝试在本地 Windows 机器上设置一个在 docker 中运行的 GitLab ce 服务器。尝试配置 GitLab CI,在作业结束时上传工件时遇到问题:

警告:将工件作为“存档”上传到协调器...失败 id=245 responseStatus=500 内部服务器错误状态=500 token=i3yfe7rf

GitLab 作业失败

在显示更多日志之前,这是我的设置。我使用不同的容器

  • 一个用于运行 GitLab
  • 一个用于运行 CI 运行程序 (gitlab-runner)
  • 一个用于运行容器注册表
  • 最近添加的一个容器,用于在本地 s3 服务器 (minio) 上存储工件

这是唯一注册的跑步者的 config.toml 文件。请注意,此版本使用本地 s3 服务器,但本地缓存也会发生同样的情况。

[[runners]]
  name = "Docker Runner"
  url = "http://192.168.1.18:6180/"
  token = "JHubtvs8kFaQjJNC6r6Z"
  executor = "docker"
  clone_url = "http://192.168.1.18:6180/"
  [runners.custom_build_dir]
  [runners.cache]
    Type = "s3"
    Path = "mycustom-s3"
    Shared = true
    [runners.cache.s3]
      ServerAddress = "192.168.1.18:9115"
      AccessKey = "XXXXXX"
      SecretKey = "XXXXXX"
      BucketName = "runner"
      Insecure = true
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker] …
Run Code Online (Sandbox Code Playgroud)

gitlab gitlab-ci-runner gitlab-ce

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

当前一阶段至少有一个作业成功时,如何自动运行 GitLab CI 作业?

给定两个阶段,第一阶段有两个工作,第二阶段有一个工作:

stages:
  - a
  - b

foo:
    stage: a
    when: manual

faa:
    stage: a
    when: manual

bar:
    stage: b
    when: i_dont_know
Run Code Online (Sandbox Code Playgroud)

当前一阶段中的至少一项工作成功时,我想运行第二阶段。

但是,文档仅显示以下选项when

  • on_success- 仅当早期阶段的所有作业都成功时才执行作业,或者因为它们具有 而被视为成功allow_failure: true
  • on_failure- 仅当早期阶段至少有一项作业失败时才执行作业。
  • always- 无论早期阶段的作业状态如何,都执行作业。

有什么技巧可以实现我的目标吗?

gitlab gitlab-ci gitlab-ci-runner

7
推荐指数
1
解决办法
2475
查看次数

常规作业的“if”语句中的 $CI_COMMIT_TAG

我尝试做一个非常基本的 GitLab CI 工作。
我想要:
当我推送到开发时,gitlab 会使用标签“develop”构建 docker 镜像
当我推送到 main 时,gitlab 检查当前提交是否有标签,并用它构建镜像,否则不会触发作业。

Build and publish docker image:
  stage: build
  rules:
    - if:
        ($CI_COMMIT_BRANCH == "main" && $CI_COMMIT_TAG && $CI_PIPELINE_SOURCE == "push")
      variables:
        TAG: $CI_COMMIT_TAG
    - if:
        ($CI_COMMIT_BRANCH == "develop" && $CI_PIPELINE_SOURCE == "push")
      variables:
        TAG: develop
  script:
    - echo $TAG
    - ...<another commands>
Run Code Online (Sandbox Code Playgroud)

但它并没有按预期工作。$CI_COMMIT_TAG - 为空。尽管触发作业(合并提交)的提交有标签。

我发现我发现的解释并不能帮助使用“if”语句实现我的目标。基于此处建议的工作流程的
解决方案也没有帮助。

使用名为 COMMIT_TAG 的变量的直观方式似乎很常见。
但它就是行不通。请好心人向我解释如何实现我的目标吗?

deployment docker gitlab-ci gitlab-ci-runner devops

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

Gitlab 运行器状态显示“服务未安装”,但已安装并成功运行

我在WSL Ubuntu 20中安装了Gitlab-runner。首先,我已经注册了runner并成功运行。但是当我检查 Gitlab-runner 的状态时,它显示:

namlb@Admin:/etc/init.d$ sudo gitlab-runner status
Runtime platform                                    arch=amd64 os=linux pid=2170 revision=e0218c92
version=14.3.2
gitlab-runner: the service is not installed
Run Code Online (Sandbox Code Playgroud)

另一件让我困惑的事情是,当我已经运行gitlab-runner run命令时,我的跑步者只是执行作业,而在某些指南中,他们只需要运行gitlab-runner start,并且作业将在触发时执行。

以下是有关我的 gitlab-runner 的一些信息:

namlb@Admin:~$ sudo gitlab-runner start
[sudo] password for namlb:
Runtime platform                                    arch=amd64 os=linux pid=2563 revision=e0218c92 version=14.3.2
namlb@Admin:~$ gitlab-runner status
Runtime platform                                    arch=amd64 os=linux pid=2609 revision=e0218c92 version=14.3.2
FATAL: The --user is not supported for non-root users
namlb@Admin:~$ sudo gitlab-runner status
Runtime platform                                    arch=amd64 os=linux pid=2635 revision=e0218c92 version=14.3.2
gitlab-runner: the service …
Run Code Online (Sandbox Code Playgroud)

gitlab gitlab-ci gitlab-ci-runner

7
推荐指数
1
解决办法
8651
查看次数

GitLab Runner 无法上传工件并出现“无效参数”错误

我对尝试实现 GitLab 的 CI/CD 管道完全陌生,但进展顺利。事实上,对于我的 ASP.NET 项目,如果我在msbuild使用 Web Deploy 的命令中指定发布配置文件,它实际上会将代码成功部署到 Web 服务器。

但是,我现在想让“构建”作业创建工件,将其上传到 GitLab,然后我可以随后进行部署。我们正在使用 GitLab 的自托管实例,我不是该实例的管理员,但如果我知道我要什么,我可以与管理员交谈!

所以我gitlab-ci.yml像这样配置了我的文件:

variables:
  NUGET_PATH: 'C:\Program Files\Nuget\Nuget.exe'
  NUGET_SOURCES: 'https://api.nuget.org/v3/index.json'
  MSBUILD_PATH: 'C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin\msbuild.exe'

stages:
- build

build-job:
  variables:
    CI_DEBUG_TRACE: "true"
  stage: build
  script:
    - '& "$env:NUGET_PATH" restore ApplicationTemplate.sln  -Source "$env:NUGET_SOURCES"'
    - '& "$env:MSBUILD_PATH" ApplicationTemplate\ApplicationTemplate.csproj /p:DeployOnBuild=true /p:Configuration=Release /p:PublishProfile=FolderPublish.pubxml'
  artifacts:
    paths: 
      - '.\ApplicationTemplate\bin\Release\Publish\'
Run Code Online (Sandbox Code Playgroud)

输出显示这可以很好地构建代码,并且似乎也成功找到了要上传的工件。但是,当它上传工件时,即使请求得到响应200 OK,该过程也会失败。这是日志输出:

调试模式下 GitLab Runner 的输出屏幕截图

因此,它找到工件,尝试上传它们,甚至获得响应200 OK(与我在网上找到的有关此错误的少数类似报告相反),但由于参数无效,它仍然失败。

我已经启用了详细调试,正如您从输出中看到的那样,但我一无所知。查看托管运行程序的盒子上的 Windows 事件日志中的 GitLab 运行程序条目也无法提供任何信息。工件的总大小为 61.1MB,所以我认为我的问题与此无关。

谁能从这个输出中看出什么是无效的?我可以确定哪个参数无效和/或为什么无效?

编辑:我尝试过的事情

  • 指定 的值artifacts:expire_in …

gitlab-ci gitlab-ci-runner

7
推荐指数
1
解决办法
3932
查看次数