我认为你搞混了Rundeck 命令参数 and Rundeck环境变量
这是“命令、脚本参数和作业参考参数”:${job.execid}
正如其名称所示,您可以将其用作命令参数。就像您在工作定义中所做的那样。
这是一个“环境变量”:$RD_JOB_EXECID
无需任何设置,如果您在 Rundeck 服务器本身上运行作业,则两者都可以正常工作,但如果您想将作业分派到节点,$RD_JOB_EXECID
无法开箱即用。
要通过远程命令调度传递环境变量,它是
需要在远程端正确配置 SSH 服务器。看
“sshd_config(5)”中的 AcceptEnv 指令手册页为了
指示。
使用通配符模式允许 RD_ 前缀变量提供
开放对 Rundeck 生成的环境变量的访问。
Example in sshd_config:
# pass Rundeck variables
AcceptEnv RD_*
Rundeck SSH 插件
在 Rundeck 服务器上
确保你有SendEnv RD_*
在 ssh_config 中设置
对于您的用例,${job.execid}
,${option.option1}
可以完美地工作,不会弄乱 sshd_config
它确实可以在不同的 SSH 端口上工作。
![enter image description here](https://i.stack.imgur.com/yAIpa.jpg)
XML 中的职位定义
<joblist>
<job>
<context>
<options preserveOrder='true'>
<option name='nodeFilter' />
</options>
</context>
<description></description>
<dispatch>
<excludePrecedence>true</excludePrecedence>
<keepgoing>false</keepgoing>
<rankOrder>ascending</rankOrder>
<threadcount>1</threadcount>
</dispatch>
<executionEnabled>true</executionEnabled>
<group>TEST</group>
<id>63b6f283-39b2-479d-bba9-b1742bc2ea53</id>
<loglevel>INFO</loglevel>
<name>test rundeck job context</name>
<nodefilters>
<filter>${option.nodeFilter}</filter>
</nodefilters>
<nodesSelectedByDefault>true</nodesSelectedByDefault>
<scheduleEnabled>true</scheduleEnabled>
<sequence keepgoing='false' strategy='node-first'>
<command>
<script><![CDATA[#!/usr/bin/python
import sys
print "I know ENV_VAR will not work as command line arguments %s " % sys.argv
]]></script>
<scriptargs> ">${job.execid}< >$RD_JOB_EXECID<"</scriptargs>
</command>
<command>
<script><![CDATA[#!/bin/bash
echo "But it works in Bash"
echo $RD_JOB_ID
echo $RD_JOB_EXECID
echo "Which port does sshd listening on?"
sudo netstat -tulpn | grep 2808]]></script>
<scriptargs />
</command>
</sequence>
<uuid>63b6f283-39b2-479d-bba9-b1742bc2ea53</uuid>
</job>
</joblist>