使用 Jenkins 在远程主机上创建文件夹的权限问题

使用 Jenkins 在远程主机上创建文件夹的权限问题

我在使用 Jenkins 在远程主机上创建文件夹时遇到问题。

本例中的远程主机是具有默认用户的 Ubuntu 20.04 AMI EC2 库存服务器ubuntu

ubuntu我使用以下代码将用户连接到远程服务器:

sshagent(credentials : [branchConfig.SSH_CREDENTIALS_NAME]) {
    sh 'ssh -o StrictHostKeyChecking=no ' + branchConfig.SSH_USER + '@' + branchConfig.DOCKER_HOST + ' "echo \"running whoami\" && whoami && echo \"running groups\" && groups && install --directory --mode 0755 --owner ' + branchConfig.SSH_USER + ' --group ' + branchConfig.SSH_USER + ' ~/importengine"'
}

这会输出以下错误:

+ ssh -o StrictHostKeyChecking=no [email protected] echo running whoami && whoami && echo running groups && groups && install --directory --mode 0755 --owner ubuntu --group ubuntu ~/importengine
Warning: Permanently added 'x.x.x.x' (ECDSA) to the list of known hosts.

running whoami
ubuntu
running groups
ubuntu docker
install: cannot change owner and permissions of ���/home/ubuntu/importengine���: Operation not permitted

我可以看到该文件夹​​已创建,但它具有以下权限:

drwxr-xr-x 2 root   root   4.0K Oct 13 11:12 importengine

如果我删除该文件夹并运行以下命令(以 ubuntu 身份登录时):

install --directory --mode 0755 --owner ubuntu --group ubuntu ~/importengine

...然后使用以下权限创建文件夹:

drwxr-xr-x 2 ubuntu ubuntu 4.0K Oct 13 11:24 importengine

问题

为什么该文件夹首先被创建为 root 拥有?毕竟,我可以清楚地看到whoami输出为ubuntu, 而不是root在错误输出中,因此它应该像 ubuntu 用户一样创建文件夹。

答案1

最后,我无法弄清楚是什么导致了这个问题,所以我不得不解决它通过在本地创建文件文件夹,然后对其进行 scp,就成功了。例如

sshagent(credentials : [SSH_CREDENTIALS_NAME]) {
    // copy over the .env file in a subfolder. Have to use scp because of strange permissions issue.
    sh 'mkdir -p ~/importengine && cp ' + ENV_FILEPATH + ' ~/importengine/.env'
    sh 'scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -r ~/importengine ' + SSH_USER + '@' + DOCKER_HOST + ':~/.'
}

边注

这个问题让我和我的同事都很困惑。我认为它一定是詹金斯特定的。我无法通过从我的 Linux 机器(例如在 Jenkins 之外)手动运行任何步骤来重现此问题。

相关内容