标签: gitlab-ci-runner

在本地运行 gitlab-runner 时如何使用子模块?

在我们的 Gitlab 服务器上,我有两个存储库,其中一个存储库(“EPSILON-SDK-C”)是另一个存储库的子模块。当我在我的开发机器上本地运行 gitlab-runner 时

 sudo gitlab-runner exec docker build_fw
Run Code Online (Sandbox Code Playgroud)

gitlab-runner 找不到子模块,如 gitlab-runner 的输出所示:

Updating/initializing submodules...
Submodule 'thirdparty/EPSILON-SDK-C' (/home/me/gitlab_repos/EPSILON-SDK-C) registered for path 'thirdparty/EPSILON-SDK-C'
fatal: repository '/home/me/gitlab_repos/EPSILON-SDK-C' does not exist
fatal: clone of '/home/me/gitlab_repos/EPSILON-SDK-C' into submodule path '/builds/0/project-0/thirdparty/EPSILON-SDK-C' failed
Failed to clone 'thirdparty/EPSILON-SDK-C'. Retry scheduled
fatal: repository '/home/me/gitlab_repos/EPSILON-SDK-C' does not exist
fatal: clone of '/home/me/gitlab_repos/EPSILON-SDK-C' into submodule path '/builds/0/project-0/thirdparty/EPSILON-SDK-C' failed
Failed to clone 'thirdparty/EPSILON-SDK-C' a second time, aborting
ERROR: Job failed: exit code 1
FATAL: exit code 1
Run Code Online (Sandbox Code Playgroud)

然而,当我们的 Gitlab 服务器被提交触发时,Gitlab …

gitlab-ci-runner

5
推荐指数
1
解决办法
1300
查看次数

为什么 GitLab docker-windows 执行器这么慢?

当我运行一个全新的 git 存储库时,仅README.md使用GitLab 中的.gitlab-ci.yml标准shell执行器,整个工作需要 4 秒。当我使用 docker-windows 执行器执行相同操作时,需要 33 秒!

我的.gitlab-ci.yml

no_git_nor_submodules:
  image: base_on_python36:ltsc2019
  stage: build
  tags:
    - docker-windows
  variables:
    GIT_SUBMODULE_STRATEGY: none
    GIT_STRATEGY: none
  script:
    - echo test

no_docker_no_git_nor_submodules:
  stage: build
  tags:
    - normal_runner
  variables:
    GIT_SUBMODULE_STRATEGY: none
    GIT_STRATEGY: none
  script:
    - echo test
Run Code Online (Sandbox Code Playgroud)

我认为可能存在的一个问题是 Windows 上的 docker 镜像往往很大。我在这里测试过的是 5.8 GB。当我在服务器上手动启动容器时,它只需要几秒钟即可启动。我还使用更大的图像(36 GB)进行了测试,但使用该图像的作业也需要大约 33 秒。

由于这些作业不执行任何操作,也没有任何 git clone 或子模块,那么什么需要时间呢?

我知道 GitLab 使用一个神秘的辅助镜像来克隆 git 存储库以及其他类似的事情。难道是这张图片导致运行速度超级慢?

更新2019-11-04

我使用 . 对此进行了更多研究docker events。它显示 GitLab 总共启动了 7 …

gitlab-ci gitlab-ci-runner

5
推荐指数
1
解决办法
1007
查看次数

如何使用特定于 GITLAB 分支的不同变量值

我正在尝试将我们的应用程序代码从 Jenkins 迁移到 Gitlab。在这里,我想尝试一下特定于分支的变量。例如:1) 主分支代码将部署到生产环境 2) 其他分支代码可以部署在非生产环境中。

在 Jenkins 中,变量是根据它们创建的不同管道设置的。我怎样才能通过使用 gitlab 变量功能来做同样的事情。

我需要这样的东西。

主分支的 AWS_KEY 变量应设置为“XXX”,非主分支的 AWS_KEY 变量应设置为“YYY”。我想在 gitlab UI 本身中配置相同的内容(这样我就可以屏蔽 GITLAB 中的值)。

variables:
 aws_credentials: $AWS_KEY
Run Code Online (Sandbox Code Playgroud)

上面的代码片段将在我的存储库的 gitlab-ci.yml 文件中使用。AWS_KEY 值应根据分支名称更改。

environment-variables gitlab-ci gitlab-ci-runner

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

“dotnet test”在 gitlab-runner 管道中找不到 nunit 测试

我有一个带有NUnit测试项目的解决方案(Foo.Test)。

+-- src
|   +-- Foo.Gui
|   +-- Foo.Test
Run Code Online (Sandbox Code Playgroud)
+-- src
|   +-- Foo.Gui
|   +-- Foo.Test
Run Code Online (Sandbox Code Playgroud)

以下调用用于测试:

dotnet test --no-build -c Release -v n src\%TESTPROJECT%\%TESTPROJECT%.csproj --logger "trx;LogFileName=testreport.trx"

如果我在本地运行它,一切都会按预期工作:

在此输入图像描述

对构建服务器的相同调用没有找到任何测试:

在此输入图像描述

gitlab-ci.yml

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>

    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <ItemGroup>
    <Compile Remove="TestResults\**" />
    <EmbeddedResource Remove="TestResults\**" />
    <None Remove="TestResults\**" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="GitVersionTask" Version="5.1.2">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="nunit" Version="3.12.0" />
    <PackageReference Include="NUnit3TestAdapter" Version="3.15.1" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Foo.Gui\Foo.Gui.csproj" …
Run Code Online (Sandbox Code Playgroud)

.net nunit unit-testing gitlab-ci-runner dotnet-test

5
推荐指数
1
解决办法
5857
查看次数

从高山图像中捕获 SIGTERM

我试图从 docker 实例捕获 SIGTERM 信号(基本上是在调用 docker stop 时),但找不到方法,因为我执行的每次尝试都有不同的结果。

以下是我的设置

Dockerfile

FROM gitlab/gitlab-runner:alpine

COPY ./start.sh /start.sh

ENTRYPOINT ["/start.sh"]
Run Code Online (Sandbox Code Playgroud)

启动文件

FROM gitlab/gitlab-runner:alpine

COPY ./start.sh /start.sh

ENTRYPOINT ["/start.sh"]
Run Code Online (Sandbox Code Playgroud)

现在我构建 docker 镜像

$ docker build -t dockertrapcatch .
Sending build context to Docker daemon  51.71kB
Step 1/3 : FROM gitlab/gitlab-runner:alpine
 ---> 9f8c39873bee
Step 2/3 : COPY ./start.sh /start.sh
 ---> Using cache
 ---> ebb3cac0c509
Step 3/3 : ENTRYPOINT ["/start.sh"]
 ---> Using cache
 ---> 7ab67fe5a714
Successfully built 7ab67fe5a714
Successfully tagged dockertrapcatch:latest
Run Code Online (Sandbox Code Playgroud)

运行泊坞窗

#!/bin/bash

deregister_runner() {
    echo …
Run Code Online (Sandbox Code Playgroud)

sigkill docker dockerfile gitlab-ci-runner alpine-linux

5
推荐指数
1
解决办法
6241
查看次数

如何将 std 错误重定向到 GitLab 运行程序中的 std out

我正在研究GitLab CI/CD并且我知道如何在正常情况下将标准错误重定向到标准输出。就是使用2>&1or >/dev/null 2>&1

有时,我需要一些引发错误的命令,但这些错误并不严重。例如,当我部署 docker 应用程序时,我想停止旧容器(如果存在)并忽略容器不存在时将发生的错误。在这种情况下,我只想忽略标准错误并保留进程进行部署。当我使用 时AWS CodeDeploy,错误重定向2>&1确实有效,但在 中GitLab CI/CD,它不起作用。

下图是取消 CI/CD 进程的错误。如果没有命令停止不存在的容器,则不会出现错误并且部署确实可以工作。

问题。

如何将 std 错误重定向到 std out 或忽略错误并保持部署GitLab CI/CD

在此输入图像描述

在此输入图像描述

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

5
推荐指数
1
解决办法
3047
查看次数

仅当引用或可变条件时才无法执行 GitLab 运行程序作业

我希望 CI 仅在我位于master合并请求计划管道 变量COVERAGE_TEST等于时执行此作业ON

c++TestCoverage:
  stage: analysis
  script: "./ciScripts/testCoverageScript.sh"
  tags:
    - framework
  dependencies:
    - c++Build
  variables:
    GIT_STRATEGY: fetch
  artifacts:
    paths:
      - ./build/test_coverage/
    expire_in: 1 week
    when: on_success
Run Code Online (Sandbox Code Playgroud)

我尝试添加以下几行:

only:
  refs:
    - master
    - merge_requests
    - schedule
  variables:
    - $COVERAGE_TEST == "ON"
Run Code Online (Sandbox Code Playgroud)

但结果实际上是 -> If ((Master || MergeRequest || ScheduledPipeline) && COVERAGE_TEST == ON)


我也尝试过:

only:
  variables:
    - $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"
    - $CI_PIPELINE_SOURCE == 'merge_request_event'
    - $CI_PIPELINE_SOURCE == 'schedule'
    - $COVERAGE_TEST …
Run Code Online (Sandbox Code Playgroud)

gitlab gitlab-ci gitlab-ci-runner

5
推荐指数
1
解决办法
5267
查看次数

GitLab CI - 当文件内容更改时运行管道

我有一个包含多个项目的单一存储库(不是我的设计选择)。

每个项目都有一个.gitlab-ci.yml设置,用于在“版本”文件更改时运行管道。这很好,因为用户可以签入stagemaster(用于热修复),并且创建构建并将其部署到测试环境。

master问题是当用户从to进行合并stage并提交回 to stage(以引入任何修补程序)时。这会导致所有管道运行;即使对于没有实际内容更改的项目也是如此。

如何允许管道从master和/或stage但仅在“版本”文件的内容更改时运行?就像用户更改版本号一样。

这是一个示例.gitlab-ci.yml(我有 5 个,mono-repo 中的每个项目 1 个)

#
# BUILD-AND-TEST - initial build
#
my-project-build-and-test:
  stage: build-and-test
  script:
    - cd $MY_PROJECT_DIR
    - dotnet restore
    - dotnet build
  only:
    changes:
      - "MyProject/.gitlab-ci.VERSION.yml"
  # no needs: here because this is the first step

#
# PUBLISH
#
my-project-publish:
  stage: publish
  script:
    - cd $MY_PROJECT_DIR
    - dotnet publish --output $MY_PROJECT_OUTPUT_PATH --configuration Release …
Run Code Online (Sandbox Code Playgroud)

gitlab gitlab-ci gitlab-ci-runner

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

从 docker 注册 gitlab-runner 到 gitlab

我是码头工人的新手。我使用以下命令运行 gitlab ce 容器:

docker run --detach --hostname localhost --publish 443:443 --publish 80:80 --name gitlab --restart always gitlab/gitlab-ce:latest
Run Code Online (Sandbox Code Playgroud)

这个容器工作得很好

我使用以下命令运行 gitlab-runner 容器:

docker run -d --name gitlab-runner --restart always gitlab/gitlab-runner:latest
Run Code Online (Sandbox Code Playgroud)

我的问题是当我想注册 gitlab-runner 时,跑步者问我:

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
Run Code Online (Sandbox Code Playgroud)

我的回答是:http://localhost:80/但它给了我错误:

ERROR: Registering runner... failed                 runner=K8trLPJx status=couldn't execute POST against http://localhost:80/api/v4/runners: Post http://localhost:80/api/v4/runners: dial tcp 127.0.0.1:80: connect: connection refused
PANIC: Failed to register this runner. Perhaps you are having network problems
Run Code Online (Sandbox Code Playgroud)

2 个容器在我的 Windows 10 电脑上运行

我不想在我的电脑上本地运行 …

gitlab docker gitlab-ci-runner

5
推荐指数
1
解决办法
2805
查看次数

每次部署后运行的 Gitlab CI 作业以报告状态

我想向其余 API 发送有关部署状态的报告。
它应该独立于部署作业(因为 $IMAGE2 依赖性),因为我想在其他项目中使用报告作业。所以我在 Gitlab CI 中创建了两个作业,如下所示:

deploy:
  stage: deploy
  image: $IMAGE1
  script:
    - cd ${CI_PROJECT_DIR} && echo 'Failed' > deployment-status
    # some codes to deploy and exit 1 if not successful
    - cd ${CI_PROJECT_DIR} && echo 'Passed' > deployment-status  #This line run only when deployment is successful
  when: manual
  artifacts:
    when: always
    paths:
      - deployment-status

report-deployment:
  stage: post-deploy
  image: $IMAGE2
  script:
    - cd ${CI_PROJECT_DIR} && cat deployment-status
    # some codes to report the status of deployment to …
Run Code Online (Sandbox Code Playgroud)

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

5
推荐指数
1
解决办法
530
查看次数