从docker复制到CI内部构建的主机

从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

我想知道是否有可能以某种方式将文件/文件夹从docker内部复制到主机,但复制本身是在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中显示为一个新的子目录。