标签: gitlab-ci-runner

Gitlab docker executor - 在before_script之后缓存图像

在文件中gitlab-ci有一个选项,.gitlab-ci.yml用于在任何实际脚本运行之前执行命令,称为before_script..gitlab-ci.yml示例说明了在此安装辅助程序.但是,我注意到的是,使用docker执行程序时,Docker中没有缓存这些更改.我天真地假设在运行这些命令后,docker会缓存图像,因此对于下一次运行或测试,docker只会加载之后生成的缓存图像before_script.这将大大加快构建速度.

举个例子,我.gitlab-ci.yml看起来有点像:

image: ubuntu

before_script:
    - apt-get update -qq && apt-get install -yqq make ...

build:
    script:
        - cd project && make
Run Code Online (Sandbox Code Playgroud)

一个可能的解决方案是转到跑步机并创建一个docker镜像,可以构建我的软件而无需任何其他安装,然后image在yaml文件的部分中引用它.这样做的缺点是,无论何时我想添加依赖项,我都需要登录到转轮计算机并在构建成功之前更新映像.如果我只是必须将依赖项添加到结尾apt-get install并且让docker/gitlab-ci处理适当的缓存,那将会更好.

还有一个cache命令.gitlab-ci.yml,我尝试设置untracked: true,我认为会缓存所有不是我的项目的副产品,但它似乎没有任何影响.

有没有办法得到我想要的行为?

gitlab docker gitlab-ci gitlab-ci-runner

9
推荐指数
2
解决办法
3104
查看次数

Gitlab runner docker无法解析主机

我在我的Ubuntu OS上使用了2个容器:Gitlab-ce和gitlab-runner

容器名称是:gitlab_gitlab_1gitlab_gitlab-runner_1

我通过访问我的gitlab应用程序 gitlab.localhost.com:801

我用这个命令成功注册了一个跑步者:

docker exec -it gitlab_gitlab-runner_1 gitlab-runner register --non-interactive --url http://gitlab_gitlab_1 --registration-token _wgMgEx3nBocYQtoi83c --executor docker --docker-image alpine:latest
Run Code Online (Sandbox Code Playgroud)

然后,当我开始工作时,我收到此错误消息:

Running with gitlab-runner 10.7.1 (b9bba623)
  on 589a617ee407 12ba77f7
Using Docker executor with image alpine:latest ...
Pulling docker image alpine:latest ...
Using docker image sha256:3fd9065eaf02feaf94d68376da52541925650b81698c53c6824d92ff63f98353 for alpine:latest ...
Running on runner-12ba77f7-project-1-concurrent-0 via 01196621a827...
Cloning repository...
Cloning into '/builds/root/test'...
fatal: unable to access 'http://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@gitlab.localhost.com/root/test.git/': Could not resolve host: gitlab.localhost.com
ERROR: Job failed: exit code 1
Run Code Online (Sandbox Code Playgroud)

在这两个容器中,我都可以访问主机名gitlab.localhost.com …

docker gitlab-ci gitlab-ci-runner

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

用于Gradle的GitLab CI机密变量发布

如何使用GitLab CI秘密变量设置Gradle发布任务用户凭证?我正在使用gradle maven publish插件,这是build.gradle的片段

repositories {
    maven {
      credentials {
        username artifactUser
        password artifactPass
      }
      url "..."
    }
  }
Run Code Online (Sandbox Code Playgroud)

我尝试gradle.properties如下使用

artifactUser=${env.MAVEN_REPO_USER}
artifactPass=${env.MAVEN_REPO_PASS}
Run Code Online (Sandbox Code Playgroud)

还有几种访问.gitlab-ci.yml文件中机密变量的方法(因为未从gradle中拾取gradle.properties或未正确转换变量,因此它位于根项目目录中)

方法1

'./gradlew publish -x test -PartifactUser=${env.MAVEN_REPO_USER} -PartifactPass=${env.MAVEN_REPO_PASS}'
Run Code Online (Sandbox Code Playgroud)

错误: /bin/bash: line 56: -PartifactUser=${env.MAVEN_REPO_USER}: bad substitution

方法2

    before_script:
      - chmod +x ./gradlew
      - export REPO_USER=${env.MAVEN_REPO_USER}
      - export REPO_PASS=${env.MAVEN_REPO_PASS}
    ...
    deploy:
  stage: deploy
  script:
    - ./gradlew publish -x test -PartifactUser=$REPO_USER -PartifactPass=$REPO_PASS
Run Code Online (Sandbox Code Playgroud)

我正在使用openjdk:8-jdk-slimgradle包装器构建图像。此类变量用法似乎存在多个问题,我们有什么解决方法吗?

gradle gitlab gradlew gitlab-ci gitlab-ci-runner

9
推荐指数
2
解决办法
3124
查看次数

gitlab ci缓存没有匹配的文件

我尝试使用gitlabRunner构建APK

当我构建apk时,我不想每次都下载所有构建文件

所以我尝试缓存.gradle / caches和.gradle / wrappers

以下是我的gitlab-ci.yml

sdk_build_job
  image: myimage:latest
  stage: sdk-build
  script:
    ...
  cache:
    key: gradle-cache
      - /root/.gradle/caches
      - /root/.gradle/wrapper
Run Code Online (Sandbox Code Playgroud)

但是创建gradle-cache总是发出警告

Creating cache gradle-cache...
WARNING: /root/.gradle/caches: no matching files       
WARNING: /root/.gradle/wrapper: no matching files      
Archive is up to date!                             
Run Code Online (Sandbox Code Playgroud)

我不知道为什么找不到缓存和包装器目录

当我进入Docker容器并找到文件夹时,位置很好

root@runner-3d9fa57b-project-4-concurrent-0:~/.gradle# pwd
/root/.gradle
root@runner-3d9fa57b-project-4-concurrent-0:~/.gradle# ls -al
total 28
drwxr-xr-x 7 root root 4096 Dec 28 02:21 .
drwx------ 1 root root 4096 Dec 28 02:19 ..
drwxr-xr-x 6 root root 4096 Dec 28 02:20 caches
drwxr-xr-x 3 …
Run Code Online (Sandbox Code Playgroud)

gitlab-ci gitlab-ci-runner

9
推荐指数
2
解决办法
2258
查看次数

如何在 GitLab 管道的各个阶段之间保留 docker 图像实例?

在过去的几周里,我一直在使用 GitLab.com 上的公共共享运行器为私有存储库中的 php 项目设置我的第一个管道。此时管道非常简单,定义了两个阶段:

stages:
  - test
  - deploy
Run Code Online (Sandbox Code Playgroud)

测试阶段运行composer update -o构建项目的依赖,连接到远程数据库服务器,并运行CodeCeption测试框架来测试构建和生成代码覆盖率报告。

部署阶段运行composer update --no-dev -o重建项目,只生产依赖和利用rsync将文件推到生产网络服务器。

现在一切正常,但是对于每个阶段,它都会运行拉取 docker 镜像、安装依赖项以及从 git 中提取项目的整个过程。似乎只加载一次 docker 镜像和项目会更有效率,然后运行测试并使用相同的持久构建实例一个接一个地部署阶段。

我意识到很多时候您确实希望为每个阶段创建一个新实例,但是对于我的项目,我觉得这对于时间和服务器资源来说效率很低。

我可以将所有内容配置为在同一阶段运行,这将消除冗余的 docker 映像进程,但我会失去 GitLab 中的管道功能,您可以在其中查看哪些阶段失败,并使后续阶段依赖于前一个阶段的成功。

在此处输入图片说明

从我对文档和几个相关问题的审查来看,这似乎与此过程如何工作的架构有关,其中作业彼此独立(甚至可以由不同的运行者处理)并组织成管道上的阶段。

我所拥有的当然是可行的(如果有点慢)但我想我会在这里问这个问题,以防万一我遗漏了什么会使这个过程更有效,同时仍然保留 CI 管道功能。

gitlab-ci gitlab-ci-runner

9
推荐指数
1
解决办法
2346
查看次数

我可以对多个 gitlab 实例使用相同的 gitlab-runner 吗?

我在不同的网络上有两个单独的 git-lab 实例。我可以为每个人使用相同的跑步者吗?假设两个 git-lab 实例都可以访问带有运行器的服务器。是否可以为我的两个 git-lab 实例使用一个运行程序?我已经阅读了大部分关于跑步者的 git-lab 文档,但它似乎没有谈论这种情况,至少据我所知是这样。

gitlab gitlab-ci gitlab-ci-runner

8
推荐指数
1
解决办法
5753
查看次数

如何在fastlane fastfile中使用gitlab CI环境变量?

我目前正在使用.env文件来获取 FASTFILE 中的环境变量,但现在我正在尝试使用 GitLab CI/CD 自动化 fastlane。

由于.env包含所有键的文件无法推送到分支,因此我必须.env在 GitLab 运行程序的环境变量中声明所有或环境变量。

我想知道如何在我的 fastfile 中使用 GitLab 运行程序的环境变量。

 lane :build_staging do |options|
    environment_variable(set: { 'ENVFILE' => '.env.staging' }) // I want to use the GitLab environment variable
    clean
    gradle(task: options[:task], build_type: 'Staging', project_dir: 'android/')

  end
Run Code Online (Sandbox Code Playgroud)

gitlab gitlab-ci-runner fastlane

8
推荐指数
1
解决办法
3052
查看次数

如何列出 GitLab Runner 最近的所有工作?

我有兴趣列出在特定时期(在我的例子中是最后六个月)在 GitLab Runner 上运行的所有作业。或者更准确地说:我想找到所有已运行作业的项目。有没有办法通过网络界面或登录跑步者来做到这一点?

在网络界面中,我尝试查看管理区域 > 跑步者 > [Select_specific_runner]。在这里我可以看到“此运行者最近提供的作业”,但这仅列出了最近 30 次运行。

我也尝试过gitlab-runner从命令行使用该命令,但我还没有找到列出实际运行的方法。

gitlab gitlab-ci-runner

8
推荐指数
1
解决办法
7313
查看次数

Gitlab CI:如果未设置变量,管道就会失败?

如果用户触发管道并且没有设置使用options值调用的变量,是否有办法使我的整个管道失败?

我尝试过诸如 only 和规则之类的东西,但它们只是跳过作业而不是让所有作业失败。

gitlab gitlab-ci gitlab-ci-runner

8
推荐指数
1
解决办法
9944
查看次数

在 Docker 场景中,在 Docker 中挂载 `/var/run/docker.sock` 的结果是什么?

我读过Can Anybodyterpret docker.sock来了解/var/run/docker.sock它的作用,但它在 GitLab CI 的Use Docker socket binding中的使用让我感到困惑。

这是他们的注册命令示例gitlab-runner

sudo gitlab-runner register -n \
  --url https://gitlab.com/ \
  --registration-token REGISTRATION_TOKEN \
  --executor docker \
  --description "My Docker Runner" \
  --docker-image "docker:19.03.12" \
  --docker-volumes /var/run/docker.sock:/var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)

我看到可以从两个地方获取生成的容器docker

  1. Unix 套接字/var/run/docker.sock
  2. docker包含在基础映像中的二进制文件docker:19.03.12

这不是PATH冲突吗?我认为应该是其中之一,我可以docker从主机的 unix 套接字或基本映像中获得使用的能力。

我认为--docker-image应该是ubuntu:latest或者不带有 的东西docker,因为已经来自主机套接字PATHdocker或者,可以移除 docker 套接字安装座。

关于 的双重包含,实际上发生了什么docker

unix-socket docker gitlab-ci gitlab-ci-runner docker-in-docker

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