如何使Docker构建使用以前作业的缓存?

nszi6y05  于 2023-10-16  发布在  Docker
关注(0)|答案(2)|浏览(112)

我有一个Node.js应用程序,我想在Gitlab CI/CD中容器化。这个应用程序包含一个git子模块,其中包含它的Angular前端。在进行“docker-build”作业之前,必须生成前端。
我的想法是在我的.gitlab-ci.yml文件中添加一个专用的stage,它将在缓存的“fe”目录中生成前端:

stages:
    - front-end
    - build
    - test
    - package-build

  front-end:
    stage: front-end
    image: "registry.hub.docker.com/trion/ng-cli-karma:latest"
    script:
      - npm run fe-install
      - npm run fe-build
    cache:
      paths:
        - fe

但是,如何在后续的“docker-build”作业中获取这个缓存的“fe”目录,以便Dockerfile可以将前端复制到容器中?
我忘了说“docker build”工作是由从“to-be-continuous”框架导入的文件提供的。我想这一点很重要

bis0qfac

bis0qfac1#

我认为你可以在你的.gitlab-ci.yml中使用artifacts关键字。这样,您就可以在后续的docker-build作业中获取缓存的fe目录。
更新文件:

stages:
  - front-end
  - build
  - test
  - package-build

front-end:
  stage: front-end
  image: "registry.hub.docker.com/trion/ng-cli-karma:latest"
  script:
    - npm run fe-install
    - npm run fe-build
  cache:
    paths:
      - fe

docker-build:
  stage: build
  image: docker:latest
  script:
    - docker build -t your-image-name .
    - docker create --name dummy your-image-name
    - docker cp dummy:/your-path-to-fe /path-in-container
    - docker rm -v dummy
  dependencies:
    - front-end  
  artifacts:
    paths:
      - fe/
xxhby3vn

xxhby3vn2#

GitLab CI/CD的cache功能允许您保存作业之间的依赖关系和工件。
以下是如何修改.gitlab-ci.yml文件的示例:

stages:
  - front-end
  - build
  - test
  - package-build

variables:
  FRONT_END_DIR: "fe"

front-end:
  stage: front-end
  image: "registry.hub.docker.com/trion/ng-cli-karma:latest"
  script:
    - npm run fe-install
    - npm run fe-build
  cache:
    paths:
      - $FRONT_END_DIR

docker-build:
  stage: build
  script:
    - # Your Docker build commands here
    - docker build -t my-app .
    - docker run my-app
  dependencies:
    - front-end

在Dockerfile中,您可以使用COPY命令将缓存的前端目录复制到容器中。

# Other Dockerfile instructions...
COPY $FRONT_END_DIR /path/to/destination/in/container

使用此配置,前端将在front-end作业中生成并缓存。然后,在docker-build作业中,您可以使用Dockerfile中缓存的前端目录。这可以确保您的前端包含在Docker镜像中。

相关问题