我最近安装了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
我在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我不知道如何做到这一点......
是否可以在特定运行器上运行管道?(不使用标签)
使用可行environments,甚至可行gitlab runner exec?
场景:
已有一个已有多个运行器的项目(用于注册运行器的特定项目令牌),并且具有自己的关联标签(因此也不能更改它们)。
我要添加一个新的运行器,但是需要首先对其进行测试以确保其正常工作,但是我需要强制在该机器上构建管道,而无需更改任何标签或运行器的特定项目。
我有一个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) 我想知道如果提交带有标签,是否有可能将生成工件的作业设置为永不过期,否则它应该过期。目前,它在全球范围内设置为 3 天后到期。但我想要的东西是,如果提交是通过特定的操作完成的tag,并且它运行Job A生成工件,那么它永远不会过期。但对于没有标签的其他提交也应运行相同的Job A操作,并且为此生成的工件应在全局设置的时间内过期。
我正在尝试在本地 Windows 机器上设置一个在 docker 中运行的 GitLab ce 服务器。尝试配置 GitLab CI,在作业结束时上传工件时遇到问题:
警告:将工件作为“存档”上传到协调器...失败 id=245 responseStatus=500 内部服务器错误状态=500 token=i3yfe7rf
在显示更多日志之前,这是我的设置。我使用不同的容器
这是唯一注册的跑步者的 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) 给定两个阶段,第一阶段有两个工作,第二阶段有一个工作:
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 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 的变量的直观方式似乎很常见。
但它就是行不通。请好心人向我解释如何实现我的目标吗?
我在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 的 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,该过程也会失败。这是日志输出:
因此,它找到工件,尝试上传它们,甚至获得响应200 OK(与我在网上找到的有关此错误的少数类似报告相反),但由于参数无效,它仍然失败。
我已经启用了详细调试,正如您从输出中看到的那样,但我一无所知。查看托管运行程序的盒子上的 Windows 事件日志中的 GitLab 运行程序条目也无法提供任何信息。工件的总大小为 61.1MB,所以我认为我的问题与此无关。
谁能从这个输出中看出什么是无效的?我可以确定哪个参数无效和/或为什么无效?
artifacts:expire_in …gitlab-ci-runner ×10
gitlab-ci ×8
gitlab ×6
docker ×2
artifacts ×1
deployment ×1
devops ×1
git ×1
gitlab-api ×1
gitlab-ce ×1
heroku ×1