【问题标题】:How to run a shell script on remote machine through ssh using jenkins job如何使用 jenkins 作业通过 ssh 在远程机器上运行 shell 脚本
【发布时间】:2015-04-24 09:17:16
【问题描述】:

我想在通过 ssh 登录后在远程机器上运行一个 shell 脚本。 这是我的代码。

#!/bin/bash 
USERNAME=user
HOSTS="172.20.16.120"

对于 ${HOSTS} 中的 HOSTNAME ;做 sshpass -p 密码 ssh -t -t ${USERNAME}@${HOSTNAME}

echo [QACOHORT-INFO] Space Before clean up

df -h

callworkspace()

{
if [ "$?" = "0" ];

then

for i in `ls`; do 

if [ "$1" = "workspace" ] &&  echo "$i" | grep -q "$VERSION_WS" && [ "$VERSION_WS" != "" ];

then

echo [QACOHORT-INFO] Removing files-in:
pwd

rm -rf $i

echo [QACOHORT-INFO] Removed: $i

fi

if echo "$i" | grep -q "wasabi$VERSION_HUDSON"  && [ "$VERSION_HUDSON" != "" ];

then
echo [QACOHORT-INFO] Removing files-in $i

rm -rf $i/*

elif echo "$i" | grep -q "wasabiSDK$VERSION_HUDSON"  && [ "$VERSION_HUDSON" != "" ];

then

echo [QACOHORT-INFO] Removing files-in $i

#rm -rf $i/*

fi

done

fi
}

unamestr=`uname`

if [ "$unamestr" = "Linux" ];

then

cd /home/jenkin/workspace/Hudson/

callworkspace

cd /home/jenkin/workspace/Hudson/workspace

callworkspace workspace

echo [QACOHORT-INFO] Removing temp files

rm -rf /tmp/tmp* 

rm -rf ~/.local/share/Trash/*

else [ "$unamestr" = "Darwin" ];

cd /Users/ITRU/ws/Hudson/

callworkspace

cd /Users/ITRU/ws/Hudson/workspace

callworkspace workspace

echo [QACOHORT-INFO] Removing temp files

rm -rf /tmp/tmp* 

rm -rf ~/.Trash/*

fi

unamestr=`uname -o`

if [ "$unamestr" = "Cygwin" ];

then

cd D:/work/Hudson

callworkspace

cd D:/work/Hudson/workspace

callworkspace workspace

fi


echo [QACOHORT-INFO] Space after clean up
df -h 
done
exit 0

通过 ssh 登录后,我只需要在 ssh 作为 shell 脚本之后运行以下行。我不想将这些行保留在 .sh 文件中并运行。我需要在詹金斯运行它。有人可以帮忙吗?

【问题讨论】:

  • 请修正代码标识。在编辑期间使用{}

标签: shell ssh jenkins


【解决方案1】:

我建议您按照以下步骤操作:

  1. 将您的远程计算机配置为从节点。
    • Jenkins 提供节点属性
    • 转到节点属性> 环境变量> 在那里您可以为配置提供名称和值。我的设置中有以下内容:

名称:远程机器1 值:172.20.16.120

名称:用户名 值:用户

  1. 完成 Jenkins 节点配置后,您可以创建 Jenkins 作业并配置 Jenkins 作业。Jenkins 配置构建步骤提供“执行 Windows 批处理命令”,您可以在那里运行您的 shell 脚本。请不要忘记在 Jenkins 作业配置中的“限制可以运行此项目的位置”步骤中指定您的远程计算机。

如果您还有任何具体问题,请告诉我。

【讨论】:

    【解决方案2】:

    现在偶然发现了一个类似的问题,你可以尝试这样解决它:

    for HOSTNAME in ${HOSTS} ; do 
        sshpass -p password ssh -t -t ${USERNAME}@${HOSTNAME} '(
            pwd
            ls -l
            <put your script here>
        )'
    done
    

    【讨论】: