我有一个Shell脚本,可以通过SSH从Jenkins远程调用它。如果我手动SSH到用户帐户,然后运行脚本,它将起作用。但是,当Jenkins执行此操作(使用相同的用户帐户,但将命令作为SSH命令的参数执行)时,它将无法在路径上找到应用程序。
lsb_release -a 没有可用的LSB模块。 发行人ID:Ubuntu 说明:Ubuntu 16.04.5 LTS 发行:16.04 代号:xenial
uname-a Linux 4.4.0-1066-aws#76-Ubuntu SMP Thu Aug 16 16:21:21 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux
ls -la
total 76
drwxr-xr-x 7 app app 4096 Sep 3 07:49 .
drwxr-xr-x 4 root root 4096 Aug 19 14:31 ..
-rw------- 1 app app 12235 Sep 3 07:52 .bash_history
drwx------ 3 app app 4096 Aug 28 17:06 .cache
drwx------ 2 app app 4096 Aug 22 16:07 .docker
-rw-rw-r-- 1 app app 6064 Sep 1 15:19 docker-compose.yml
drwx------ 4 app app 4096 Aug 22 14:37 .local
drwxrwxr-x 2 app app 4096 Aug 28 17:15 .nano
-rw-rw-r-- 1 app app 97 Aug 22 16:00 .profile
-rwxrw-r-- 1 app app 177 Aug 28 07:45 run-all-apps.sh
-rwxrw-r-- 1 app app 476 Aug 28 07:45 run-apps.sh
-rw-rw-r-- 1 app app 66 Aug 28 17:15 .selected_editor
drwx------ 2 app app 4096 Sep 3 07:49 .ssh
-rw------- 1 app app 10496 Sep 3 07:49 .viminfo
.profile
的内容:
cat .profile
# set PATH so it includes user's private bin directories
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
cat ./run-apps.sh
#!/bin/bash
set -euo pipefail
IFS=$'\n\t'
# Authenticate for ECR
eval $(aws ecr get-login --region eu-west-1 --no-include-email)
在Jenkins文件中,我们有以下内容:
sshagent(credentials: ['server-ssh']) {
sh "ssh -o StrictHostKeyChecking=no -p 22 -l app ${ENVIRONMENT_HOST_NAME} './run-apps.sh'"
}
./ run-apps.sh:第12行:aws:未找到命令
如果我使用Jenkins使用的同一用户SSH到服务器,则可以运行AWS CLI:
whoami
app
和
which aws
/home/app/.local/bin/aws
最后:
aws --version
aws-cli/1.15.83 Python/2.7.12 Linux/4.4.0-1066-aws botocore/1.10.82
这可能与使用eval和环境没有传播有关吗,例如.profile
未运行,因此该应用程序不在路径上。