使用与其他阶段相关的兄弟容器中的文件夹
use a folder in sibling container raleted to other stage
我有一个包含两个阶段的管道。在第一个中,我基于来自 "node:latest" 的 Dockerfile 构建了一个图像。在这个阶段我 运行 "npm run build" 并创建构建文件夹。
在第二阶段,我想使用之前构建的 "build" 文件夹和 运行 它在 "nginx" 容器中。
但我无法在 Gitlab 的各个阶段之间共享文件夹-ci ce.
我使用 docker 执行器作为 gitlab-运行ner。
gitlab-ci-yml
image: docker:latest
services:
- name: docker:dind
command: ["--insecure-registry=mygitlab:5050"]
stages:
- build
- test
- release
variables:
DEV_IMAGE: mygitlab:5050/development/registry:dashboard-dev
RELEASE_IMAGE: mygitlab:5050/development/registry:dashboard-prod
DOCKER_TLS_CERTDIR: "/certs"
GIT_SSL_NO_VERIFY: "1"
before_script:
- docker login -u root -p my-token mygitlab:5050
build:
stage: build
script:
- docker build -t $DEV_IMAGE . --target=dashboard-dev
- docker push $DEV_IMAGE
- docker run --name dashboard-dev -d $DEV_IMAGE tail -f /dev/null
- docker cp dashboard-dev:/src/app/build /cache
- docker stop dashboard-dev
- docker rm dashboard-dev
release:
stage: release
script:
- docker build -t $RELEASE_IMAGE . --target=dashboard-prod
- docker push $RELEASE_IMAGE
only:
- master
这是我的 Dockerfile
FROM mygitlab:5050/development/registry:dashboard-dev AS dashboard-dev
EXPOSE 3000
COPY . .
RUN npm install
RUN npm run build
FROM mygitlab:5050/development/registry:nginx AS dashboard-prod
COPY builds/build /usr/share/nginx/html
这是我的 gitlab-运行ner config.toml
concurrent = 10
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "dash-dock"
url = "https://mygitlab/"
token = "my-token"
executor = "docker"
[runners.custom_build_dir]
[runners.docker]
pull_policy = "if-not-present"
tls_verify = false
extra_hosts = ["mygitlabDomain:mygitlabIP"]
image = "docker:latest"
privileged = true
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache", "/certs/client", "/builds"]
shm_size = 0
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
如果您想从以前的多级容器复制,您需要在 docker 文件中指明:
COPY --from=dashboard-dev builds/build /usr/share/nginx/html
有关详细信息,请参阅 the COPY documentation。
我有一个包含两个阶段的管道。在第一个中,我基于来自 "node:latest" 的 Dockerfile 构建了一个图像。在这个阶段我 运行 "npm run build" 并创建构建文件夹。 在第二阶段,我想使用之前构建的 "build" 文件夹和 运行 它在 "nginx" 容器中。 但我无法在 Gitlab 的各个阶段之间共享文件夹-ci ce.
我使用 docker 执行器作为 gitlab-运行ner。 gitlab-ci-yml
image: docker:latest
services:
- name: docker:dind
command: ["--insecure-registry=mygitlab:5050"]
stages:
- build
- test
- release
variables:
DEV_IMAGE: mygitlab:5050/development/registry:dashboard-dev
RELEASE_IMAGE: mygitlab:5050/development/registry:dashboard-prod
DOCKER_TLS_CERTDIR: "/certs"
GIT_SSL_NO_VERIFY: "1"
before_script:
- docker login -u root -p my-token mygitlab:5050
build:
stage: build
script:
- docker build -t $DEV_IMAGE . --target=dashboard-dev
- docker push $DEV_IMAGE
- docker run --name dashboard-dev -d $DEV_IMAGE tail -f /dev/null
- docker cp dashboard-dev:/src/app/build /cache
- docker stop dashboard-dev
- docker rm dashboard-dev
release:
stage: release
script:
- docker build -t $RELEASE_IMAGE . --target=dashboard-prod
- docker push $RELEASE_IMAGE
only:
- master
这是我的 Dockerfile
FROM mygitlab:5050/development/registry:dashboard-dev AS dashboard-dev
EXPOSE 3000
COPY . .
RUN npm install
RUN npm run build
FROM mygitlab:5050/development/registry:nginx AS dashboard-prod
COPY builds/build /usr/share/nginx/html
这是我的 gitlab-运行ner config.toml
concurrent = 10
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "dash-dock"
url = "https://mygitlab/"
token = "my-token"
executor = "docker"
[runners.custom_build_dir]
[runners.docker]
pull_policy = "if-not-present"
tls_verify = false
extra_hosts = ["mygitlabDomain:mygitlabIP"]
image = "docker:latest"
privileged = true
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache", "/certs/client", "/builds"]
shm_size = 0
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
如果您想从以前的多级容器复制,您需要在 docker 文件中指明:
COPY --from=dashboard-dev builds/build /usr/share/nginx/html
有关详细信息,请参阅 the COPY documentation。