首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于cache的Gitlab CI转轮配置

基于cache的Gitlab CI转轮配置
EN

Stack Overflow用户
提问于 2016-03-23 18:23:28
回答 4查看 15.3K关注 0票数 11

在gitlab CI中,我似乎无法在作业之间获得缓存或工件。我怀疑这与我的配置有关,但我不确定是什么原因。我正在运行gitlab和gitlab multirunner,它们都在docker中运行,使用下面的。为了简洁起见,我省略了数据库配置和一些环境变量:

代码语言:javascript
复制
version: '2'

services:
  gitlab:
    image: sameersbn/gitlab:8.5.1
    links:
      - redis:redisio
      - postgresql:postgresql
    ports:
      - "10080:80"
      - "10022:22"
    environment:
      ...
    volumes:
      - gitlab_data:/home/git/data

  gitlab-ci-runner:
    restart: always
    image: gitlab/gitlab-runner
    volumes:
      - gitlab_runner_config_data:/etc/gitlab-runner
      - /var/run/docker.sock:/var/run/docker.sock
      - /etc/nginx/ssl/gitlab.crt:/etc/gitlab-runner/certs/ca.crt
      - /etc/ssh:/ssh
    links:
      - gitlab:gitlab

  redis:
    ...
  postgresql:
    ...


volumes:
  postgresql_data:
  redis_data:
  gitlab_data:
  gitlab_runner_config_data:

转轮配置(config.toml)是:

代码语言:javascript
复制
concurrent = 1

[[runners]]
  name = "docker"
  url = <public gitlab url>/ci 
  token = <gitlab token>
  tls-ca-file = "/etc/gitlab-runner/certs/ca.crt"
  executor = "docker"
  [runners.docker]
    image = "docker-bash"
    volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]

所引用的docker-bash映像只是安装了bash的官方码头工人:1.10映像。

我的构建过程由三个步骤组成:

  1. 运行npm install和官方节点:5映像中的测试。现在,为了测试部署,我已经放弃了这一步。
  2. 生成包含代码的停靠器映像。
  3. 使用ansible,通过custome构建的ansible坞映像将构建的映像部署到生产服务器。

.gitlab-ci.yml文件如下所示:

代码语言:javascript
复制
variables:
  FULL_IMAGE_TAG: deploy-$CI_BUILD_REF_NAME:$CI_BUILD_ID-$CI_BUILD_REF
  IMAGE_FILE: deploy-$CI_BUILD_REF_NAME.tar.gz

cache:
  paths:
    - $IMAGE_FILE

build:
  stage: build
  script:
    - docker build -t $FULL_IMAGE_TAG .
    - docker save $FULL_IMAGE_TAG | gzip -cf - > $IMAGE_FILE
  artifacts:
    paths:
      - $IMAGE_FILE

deploy:
  stage: deploy
  image: ansible-ssh
  script:
    - ls
    - ansible-playbook -e image_file=$IMAGE_FILE -e branch=$CI_BUILD_REF_NAME -e full_image_name=$FULL_IMAGE_TAG deploy-playbook.yml
  only:
    - develop
    - master

正如您所看到的,这里缓存和工件部分都引用了压缩的坞映像,但实际上在部署步骤中没有可用,在部署步骤中,ansible应该将其复制到远程机器。我尝试过包含一个ls命令,所以检查文件夹内容,文件显然不在那里,但是它肯定是构建的,我可以从gitlab下载它。以下是部署作业的日志:

代码语言:javascript
复制
gitlab-ci-multi-runner 1.0.4 (014aa8c)
Using Docker executor with image ansible-ssh ...
Pulling docker image ansible-ssh ...
WARNING: Cannot pull the latest version of image ansible-ssh : Error: image library/ansible-ssh not found
WARNING: Locally found image will be used instead.

Running on runner-59d43cf3-project-8-concurrent-0 via 381c2ea97744...
Fetching changes...
Removing artifacts.zip
Removing deploy-develop.tar.gz
HEAD is now at 6009bd0 test
Checking out 6009bd0f as develop...
HEAD is now at 6009bd0... test

$ ls
Dockerfile
deploy-playbook.yml
server
$ ansible-playbook -e image_file=$IMAGE_FILE -e branch=$CI_BUILD_REF_NAME -e full_image_name=$FULL_IMAGE_TAG deploy-playbook.yml
Using /etc/ansible/ansible.cfg as config file
1 plays in deploy-playbook.yml

PLAY ***************************************************************************

TASK [setup] *******************************************************************
ok: [deploy-host]

TASK [copy docker image] *******************************************************
task path: /builds/test/test/deploy-playbook.yml:44
fatal: [deploy-host]: FAILED! => {"changed": false, "failed": true, "msg": "could not find src=/builds/test/test/deploy-develop.tar.gz"}

NO MORE HOSTS LEFT *************************************************************
    to retry, use: --limit @deploy-playbook.retry

PLAY RECAP *********************************************************************
deploy-host            : ok=1    changed=0    unreachable=0    failed=1   


ERROR: Build failed with: exit code 1

我怀疑我没有正确地设置或使用运行程序,但是除了非常简单的情况之外,我在文档中找不到太多的东西,而且我也不太了解这个工具是如何结合在一起的。

EN

回答 4

Stack Overflow用户

发布于 2016-03-24 00:10:06

缓存的设计并不是为了在构建的各个阶段之间传递文件。

来自文档

cache :定义在后续运行期间应该缓存的文件列表。

我认为你所需要的实际上正在进行中:WIP:从以前的阶段下载构建工件,并在构建的上下文中还原它们(技术预览)

票数 5
EN

Stack Overflow用户

发布于 2016-04-08 10:59:53

您在gitlab.rb中启用工件了吗?

代码语言:javascript
复制
gitlab_rails['artifacts_enabled'] = false

构建工件文档所述

票数 1
EN

Stack Overflow用户

发布于 2017-02-02 15:05:13

首先,更新gitlab和gitlab跑步者,特别是1.0.4跑步者是安静的实验者。

其次,在缓存定义中,应该添加一个键(参见https://docs.gitlab.com/ce/ci/yaml/README.html#cache-key )。

代码语言:javascript
复制
cache:
  key: "$CI_BUILD_REF_NAME"
  paths:
  - ..

https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/configuration/advanced-configuration.md#the-runners-section中,您应该修改config.toml并添加一个缓存目录

cache_dir:

构建缓存将存储在所选执行器上下文中的目录(本地、Docker、SSH)。如果使用了停靠器执行器,则需要将此目录包含在其卷参数中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36185915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档