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
폴더를 삭제하고 다음 명령을 실행하면(우분투로 로그인한 동안):
install --directory --mode 0755 --owner ubuntu --group ubuntu ~/importengine
...그런 다음 다음 권한을 사용하여 폴더를 만듭니다.
drwxr-xr-x 2 ubuntu ubuntu 4.0K Oct 13 11:24 importengine
질문
애초에 폴더가 루트 소유로 생성된 이유는 무엇입니까?결국 오류 출력이 아닌 whoami
으로 출력이 명확하게 표시되므로 우분투 사용자와 마찬가지로 폴더를 생성해야 합니다.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 외부)에서 수동으로 단계를 실행하여 이 문제를 재현할 수 없습니다.