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

質問

もともとフォルダがルート所有として作成されたのはなぜですか?最終的にエラー出力ではなくwhoami出力が明確に表示されるので、Ubuntuユーザーと同様にフォルダを作成する必要があります。ubunturoot

答え1

結局、問題の原因が何なのか分からず、解決しなければなりませんでした。ローカルにファイルフォルダを作成し、scp'ingするとうまくいきました。例えば

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 + ':~/.'
}

サイドノート

この質問は私と私の同僚を混乱させます。私はそれがJenkinsに限定されていると思います。私のLinuxコンピュータ(Jenkinsの外など)で手動で手順を実行してこの問題を再現することはできません。

関連情報