[英]How do I copy over artifacts from Gitlab runner?
我正在尝试将失败测试的视频复制到 gitlab 的默认工件位置。
在.gitlab-ci.yml
:
image: docker:20-dind
services:
- name: docker:20-dind
command: ["--tls=false"]
variables:
DOCKER_DRIVER: overlay2
DOCKER_HOST: tcp://docker:2375
DOCKER_TLS_CERTDIR: ""
POSTGRES_DB: users_dev
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_HOST: postgres
REACT_APP_USERS_SERVICE_URL: http://127.0.0.1
SECRET_KEY: ""
#RUNNING_LOCALLY: "yes"
stages:
- build
before_script:
- apk update
- apk add --no-cache --update python3-dev py3-pip curl
- curl -L https://github.com/docker/compose/releases/download/v2.3.3/docker-compose-`uname -s`-`uname -m` > docker-compose
- chmod +x docker-compose
- mv docker-compose /usr/local/bin
build:
artifacts:
paths:
- videos/
when: on_failure
stage: build
script:
- mkdir -p videos
- sh test.sh
日志 output:
我正在使用卷将容器目录的内容绑定到 gitlab 的工件默认目录:
docker run --name e2e -v "$(pwd)"/e2e/cypres/videos -w./videos --network project-0_default project-0_e2e:latest
问题是我只能下载videos
目录。 里面没有视频。
有什么帮助吗?
我假设docker run...
命令在您的test.sh
文件中,如果我理解正确,您在 docker 中使用 docker。 你可能有这样的配置: https://docs.gitlab.com/runner/install/docker.html#option-1-use-local-system-volume-mounts-to-start-the-runner-container
配置-v /var/run/docker.sock:/var/run/docker.sock
是使 docker-in-docker 工作的原因。 但是有一个问题:您的所有 docker 命令都将由主机执行,而不是由您的 docker 容器执行。
因此,当您尝试执行命令docker run...
时,主机会执行此操作。 这意味着您尝试挂载的每条路径都将属于主机而不是容器。 主机中不存在路径-v "$(pwd)"/e2e/cypres/videos
,这就是您得到一个空文件夹的原因。
也许您可以在管道中使用多个作业来获得想要的行为(您将无法依赖 docker-compose 来设置您的服务依赖项,而是使用 gitlab services
关键字。)
services:
- postgres:12.2-alpine
stages:
- build
- test
build:
stage: build
script:
- docker build . -t project-0_e2e:latest
- docker push
test:
stage: test
image: project-0_e2e:latest
script:
- npx cypress run
artifacts:
when: always
paths:
- cypress/videos/**/*.mp4
- cypress/screenshots/**/*.png
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.