在同一个 dockerized runner 上构建和部署
Build and deploy on the same dockerized runner
我想使用自托管的 GitLab 实例和 CI 运行器构建和部署静态网站(中间人),所有 运行 在本地 Docker 引擎上。如果我在一项工作中同时进行构建和部署,它会工作得很好,但是,我想知道是否可以像官方示例所建议的那样将它分成两个工作:
cache:
paths:
- _vendor
build:
stage: build
tags:
- ruby-3.0
only:
- master
script:
- apk update
- apk add build-base nodejs git
- command -v bundler || { gem install bundler; }
- bundle config set --local path '_vendor/'
- bundle install
- MM_ENV=production bundle exec middleman build
deploy:
stage: deploy
tags:
- ruby-3.0
only:
- master
variables:
PROJECT_HANDLE: "$CI_PROJECT_NAMESPACE-$CI_PROJECT_NAME"
script:
- mkdir -p /deployment/$PROJECT_HANDLE
- cd /deployment/$PROJECT_HANDLE
- mkdir -p current
- rm -rf next
- mkdir next
- cp -pr $CI_PROJECT_DIR/build/* next
- rm -rf previous
- mv current previous
- mv next current
这个问题,你必须将构建结果作为工件传递给部署,每个作业都会启动它自己的 Docker 容器。
有没有办法让两个阶段使用同一个容器,比如说,第一个(构建)阶段通过标签选择图像并启动容器并将其传递给第二个(部署)阶段?
感谢您的提示!
目前,无法在同一个容器中 运行 两个作业。 gitlab-运行ner 将为管道中的每个作业启动一个新的容器,并在作业完成后销毁它。但是,您可以 运行 它们放在一个 运行 上,因此可以重复使用下载的 Docker 图像。然而,以这种方式工作有一些好处,包括单个阶段中的并行作业,每个作业都有自己的工作区,并且每个作业都有一个干净的起点(没有留下可能导致意外副作用的工件)。
在作业和阶段之间传递 gitlab 工件效果很好,即使它会启动一个新容器。
我想使用自托管的 GitLab 实例和 CI 运行器构建和部署静态网站(中间人),所有 运行 在本地 Docker 引擎上。如果我在一项工作中同时进行构建和部署,它会工作得很好,但是,我想知道是否可以像官方示例所建议的那样将它分成两个工作:
cache:
paths:
- _vendor
build:
stage: build
tags:
- ruby-3.0
only:
- master
script:
- apk update
- apk add build-base nodejs git
- command -v bundler || { gem install bundler; }
- bundle config set --local path '_vendor/'
- bundle install
- MM_ENV=production bundle exec middleman build
deploy:
stage: deploy
tags:
- ruby-3.0
only:
- master
variables:
PROJECT_HANDLE: "$CI_PROJECT_NAMESPACE-$CI_PROJECT_NAME"
script:
- mkdir -p /deployment/$PROJECT_HANDLE
- cd /deployment/$PROJECT_HANDLE
- mkdir -p current
- rm -rf next
- mkdir next
- cp -pr $CI_PROJECT_DIR/build/* next
- rm -rf previous
- mv current previous
- mv next current
这个问题,你必须将构建结果作为工件传递给部署,每个作业都会启动它自己的 Docker 容器。
有没有办法让两个阶段使用同一个容器,比如说,第一个(构建)阶段通过标签选择图像并启动容器并将其传递给第二个(部署)阶段?
感谢您的提示!
目前,无法在同一个容器中 运行 两个作业。 gitlab-运行ner 将为管道中的每个作业启动一个新的容器,并在作业完成后销毁它。但是,您可以 运行 它们放在一个 运行 上,因此可以重复使用下载的 Docker 图像。然而,以这种方式工作有一些好处,包括单个阶段中的并行作业,每个作业都有自己的工作区,并且每个作业都有一个干净的起点(没有留下可能导致意外副作用的工件)。
在作业和阶段之间传递 gitlab 工件效果很好,即使它会启动一个新容器。