Gitlab Runner,docker执行器,从linux容器部署到CIFS共享

问题描述 投票:0回答:2

我有一个 Gitlab 运行程序,它使用 Docker 执行器运行各种作业(主机是 Ubuntu 20,来宾是各种 Linux 映像)。运行者以非特权方式运行容器。

我被一个看似简单的需求所困扰 - 我需要在 Windows 计算机上部署一些工件,将目标路径公开为经过身份验证的共享 (

\\myserver\myapp
)。无非就是用源上的文件替换目标上的文件 - 一个简单的 rsync 就可以了。

Gitlab Runner 不允许在 CI 配置中指定安装(请参阅https://gitlab.com/gitlab-org/gitlab-runner/-/issues/28121),所以我尝试使用

mount.cifs
,但我发现默认情况下,Docker 不允许在容器内安装任何内容,除非以特权运行,我想避免这种情况。

我还尝试了使用

--cap-add
的建议,如在 Docker 容器中安装 SMB/CIFS 共享中所述,但它们似乎不足以满足我的主机的要求,可能还有其他所需的功能,我不知道如何识别他们。而且,这看起来比运行特权稍微不那么难看。

现在,我并不严格需要挂载远程文件夹 - 例如,如果有一个支持 SMB 的 rsync 命令,我会非常乐意使用它。不幸的是我无法在Windows机器上安装或运行任何东西(没有SSH,没有SCP,没有FTP),我必须使用文件共享机制。

您知道如何实现这一目标吗?

docker gitlab-ci-runner smb
2个回答
1
投票

您可以使用

smbclient
将文件从 CIFS/Samba/SMB 共享复制到 CIFS/Samba/SMB 共享,而无需创建挂载:

smbclient '//myfileserver.domain.tld/sharename' --directory dir1/subdir1 -c 'put /path/to/local/file' -U '<USERNAME>%<PASSWORD>' -W <DOMAIN_WORKGROUP>

put
会将本地文件复制到远程共享,
get
会将远程文件从共享复制到本地系统。


0
投票

不幸的是,我无法在 Windows 机器上安装任何东西(没有 SSH、没有 SCP、没有 FTP)。

您可以简单地在 Go 中复制可执行文件(您可以在其他任何地方构建),监听端口,准备接收文件。
这个实现,例如:

file-receive.go
。它监听端口 8080(可以更改)并将文件内容复制到本地文件夹。

无需安装或设置:只需将 EXE 复制到目标计算机并运行即可。

从 GitLab 运行程序中,您可以'

curl
'将文件发送到远程 PC 计算机的端口 8080。


注意(2023 年 12 月)

gitlab-org/gitlab-runner
问题 28121(“允许在服务和构建容器的作业级别上配置卷安装”)应针对 GitLab 16.9(2024 年 2 月)提供。

参见 issue 30934:“16.9 Runner Group 迭代计划”

© www.soinside.com 2019 - 2024. All rights reserved.