首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >保存并在gitlab runner中的后续作业中重复使用前一个作业的整个状态(缓存所有内容以供后续作业使用)

保存并在gitlab runner中的后续作业中重复使用前一个作业的整个状态(缓存所有内容以供后续作业使用)
EN

Stack Overflow用户
提问于 2021-08-20 07:11:03
回答 1查看 469关注 0票数 1

我是gitlab的新手,已经知道如何创建和运行CI/CD管道,该管道工作得很好。尽管如此,它的运行速度相对较慢,因为我目前使用before_script在不同的作业中重复创建所需的环境。

所以我想要的是一次安装一堆包,然后在不同的工作中重用它们。我知道人们通常会为此创建一个docker映像,并重新使用它来运行CI。但在这里,我感兴趣的是在后续工作中重用不同工作状态的可能性。

下面是一个最小的例子,它解释了我的问题和我想要实现的目标:

代码语言:javascript
运行
复制
stages:
  - prepare
  - stage1
  - stage2

image: python

variables:
  PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"

cache:
  paths:
    - .cache/pip

.prepare_step1:
  before_script:
    - pip install requests

prepare-env:
  image: python:3.7
  stage: prepare
  tags:
    - docker
  extends:
    - .prepare_step1
  script:
    - pip list

run-first-job:
  stage: stage1
  tags:
    - docker
  script:
    # I want to re-use the complete last state of the "prepare-env" stage here
    # i. e. use the installed requests package
    - pip list

run-second-job:
  stage: stage2
  tags:
    - docker
  script:
    # I want to re-use the complete last state of the "prepare-env" stage here
    # i. e. use the installed requests package
    - pip list

我知道artifactscaching,但我不确定它们是否会将prepare-env作业的Docker容器的整个状态转移到后续作业run-first-jobrun-second-job中,即只安装一次包,然后在其他作业中使用它们。

欢迎任何提示,提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2021-09-07 14:53:08

我实际上找到了一个解决方案,只在特定文件(这里是Dockerfilesetup.cfg)发生变化时才构建docker镜像:

代码语言:javascript
运行
复制
stages:
  - prepare
  - run

image: python

variables:
  GIT_SUBMODULE_STRATEGY: recursive
  PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"

cache:
  paths:
    - .cache/pip

.build_docker_image_ci:
  before_script:
    - IMAGE_NAME=$CI_REGISTRY_IMAGE:"my-ci-image"
    - echo $IMAGE_NAME
    - git submodule update --recursive --remote
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_BUILD_TOKEN $CI_REGISTRY
    - DOCKER_BUILDKIT=1 docker build
      --build-arg PYTHON_REGISTRY_CONSTRING="$PYTHON_REGISTRY_CONSTRING"
      --pull -t $IMAGE_NAME .
    - docker push $IMAGE_NAME

build-docker-image-ci:
  image: python:3.7
  tags:
    - dockerbuilder
  stage: prepare
  extends:
    - .build_docker_image_ci
  rules:
    - changes:
        - Dockerfile
        - setup.cfg

run-job:
  stage: run
  image: $CI_REGISTRY_IMAGE:my-ci-image
  tags:
    - docker
  script:
    - pip list

感谢你们的帮助,亚当·马歇尔和斯劳斯!

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

https://stackoverflow.com/questions/68858223

复制
相关文章

相似问题

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