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ユーザーと同様にフォルダを作成する必要があります。ubuntu
root
答え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の外など)で手動で手順を実行してこの問題を再現することはできません。