从docker复制到CI内部构建的主机
我想知道是否有可能以某种方式将文件/文件夹从docker内部复制到主机,但复制本身是在docker内部执行的 原因是,例如:从docker复制到CI内部构建的主机,docker,continuous-integration,gitlab-ci,Docker,Continuous Integration,Gitlab Ci,我想知道是否有可能以某种方式将文件/文件夹从docker内部复制到主机,但复制本身是在docker内部执行的 原因是,例如: 提交文件到repo CI开始了 Docker安装依赖项,构建网站文件 网站文件从docker复制到/var/www/my-Website(主机) 当我搜索解决方案时,我经常看到这个命令docker cp:/file/path/in/container/host/path/target,但是这是从主机执行的。我想让整个过程自动化 当然,可能的解决方案是不使用docker
- 提交文件到repo
- CI开始了
- Docker安装依赖项,构建网站文件
- 网站文件从docker复制到/var/www/my-Website(主机)
docker cp:/file/path/in/container/host/path/target
,但是这是从主机执行的。我想让整个过程自动化
当然,可能的解决方案是不使用docker而是直接使用SSH,这就是我现在正在做的,但这不是最好的选择
下面是我的.gitlab ci.yml
文件的示例,它将解释我想要实现的目标
image: ubuntu:16.04
build:
stage: build
script:
- apt-get update
- apt-get upgrade -yy
- apt-get install hugo -yy # Static site generator
- hugo build # Build the website
- cp -R ./build/* /var/www/my-website/ # Copy to the web root
这是我的跑步者配置
[[runners]]
name = "DOCKER-TEST"
url = "https://gitlab.com/ci"
token = "{{token}}"
executor = "docker"
[runners.docker]
tls_verify = false
image = "ubuntu:16.04"
privileged = true
disable_cache = false
volumes = ["/cache", "/home/stan:/builds/stanislavromanov/test-docker:rw"]
[runners.cache]
Insecure = false
使用类似于
docker cp
的工具无法从容器复制到主机。不过,您可以将主机目录装载到容器中,例如:
$ docker run ... -v /var/www/my-website:/website-on-host ...
并对.gitlab ci.yml
中的cp
命令进行如下调整:
cp -R ./build/* /website-on-host/ # Copy to the web root
您应该能够设置一个Docker,将容器中的目录装载到主机的目录中 对于GitLab CI运行程序,可以在运行程序注册期间或稍后通过修改/etc/GitLab runner/config.toml指定。例如:
[[runners]]
url = "https://gitlab.com/ci"
token = TOKEN
executor = "docker"
[runners.docker]
tls_verify = false
image = "ubuntu:16.04"
privileged = true
disable_cache = false
volumes = ["/path/to/bind/from/host:/path/to/bind/in/container:rw"]
有关更多信息,请参阅。嘿,我尝试过这个`卷=[“/cache”,“/builds/stanislavromanov/test docker:/home/stan:rw”]`但没有看到在我的home目录中创建的任何文件。还尝试直接复制文件,如so
cp mycolfile/usr/stan/mycolfile
。我做错什么了吗?这是repo卷定义应该是host\u path:container\u path,而在我看来,您设置的是相反的。嘿,我已经将我的配置添加到了答案中,您认为它正确吗?它看起来正确,但我必须承认,我真的不明白为什么要将整个主文件夹设置为挂载。我只是将主机的/home/stan/builds设置为与容器中的输出相关联。然后,脚本将复制整个构建文件夹,同时使用提交引用命名它:cp-R./build”/output/$CI\u build\u REF“
,这将在主机上的/home/stan/builds中显示为一个新的子目录。