问题描述
如何在脚本中获取服务器 URL?
我可以得到项目@job.project@和id@job.id@,但我想得到URL。
我们有不同的 dev 和 prod 实例,我想在输出中包含一个指向作业的链接,该链接记录在不同的系统中,而无需在推出时更新脚本。
解决方法
可以表明,here
或者,您可以从 rundeck-config.properties
文件中提取值并将其存储在 data 值中(以在以后的任何步骤/作业中使用),我留下一个作业定义示例:
命令步骤:
<joblist>
<job>
<defaultTab>nodes</defaultTab>
<description></description>
<executionEnabled>true</executionEnabled>
<id>e8bb217c-ec91-418a-aec5-16df83dbcf82</id>
<loglevel>INFO</loglevel>
<name>RundeckServerName</name>
<nodeFilterEditable>false</nodeFilterEditable>
<plugins />
<scheduleEnabled>true</scheduleEnabled>
<sequence keepgoing='false' strategy='node-first'>
<command>
<fileExtension>.sh</fileExtension>
<plugins>
<LogFilter type='key-value-data'>
<config>
<invalidKeyPattern>\s|\$|\{|\}|\\</invalidKeyPattern>
<logData>true</logData>
<regex>^(grails.serverURL)=*(.+)$</regex>
</config>
</LogFilter>
</plugins>
<script><![CDATA[cat /etc/rundeck/rundeck-config.properties | grep 'grails.serverURL']]></script>
<scriptargs />
<scriptinterpreter>/bin/bash</scriptinterpreter>
</command>
<command>
<exec>echo "the rundeck server url is: ${data.grails.serverURL}"</exec>
</command>
</sequence>
<uuid>e8bb217c-ec91-418a-aec5-16df83dbcf82</uuid>
</job>
</joblist>
脚本步骤:
<joblist>
<job>
<defaultTab>nodes</defaultTab>
<description></description>
<executionEnabled>true</executionEnabled>
<id>e8bb217c-ec91-418a-aec5-16df83dbcf82</id>
<loglevel>INFO</loglevel>
<name>RundeckServerName</name>
<nodeFilterEditable>false</nodeFilterEditable>
<plugins />
<scheduleEnabled>true</scheduleEnabled>
<sequence keepgoing='false' strategy='node-first'>
<command>
<fileExtension>.sh</fileExtension>
<plugins>
<LogFilter type='key-value-data'>
<config>
<invalidKeyPattern>\s|\$|\{|\}|\\</invalidKeyPattern>
<logData>true</logData>
<regex>^(grails.serverURL)=*(.+)$</regex>
</config>
</LogFilter>
</plugins>
<script><![CDATA[cat /etc/rundeck/rundeck-config.properties | grep 'grails.serverURL']]></script>
<scriptargs />
<scriptinterpreter>/bin/bash</scriptinterpreter>
</command>
<command>
<fileExtension>.sh</fileExtension>
<script><![CDATA[echo "Rundeck URL is: @data.grails.serverURL@"]]></script>
<scriptargs />
<scriptinterpreter>/bin/bash</scriptinterpreter>
</command>
</sequence>
<uuid>e8bb217c-ec91-418a-aec5-16df83dbcf82</uuid>
</job>
</joblist>
Here 结果。
更新
要在另一个作业(在外部节点上调度)上使用数据变量,只需使用 job reference step 将数据值作为参数传递。
子作业(将命令/脚本分派到另一个节点):
<joblist>
<job>
<context>
<options preserveOrder='true'>
<option name='rdeck_srv' />
</options>
</context>
<defaultTab>nodes</defaultTab>
<description></description>
<dispatch>
<excludePrecedence>true</excludePrecedence>
<keepgoing>false</keepgoing>
<rankOrder>ascending</rankOrder>
<successOnEmptyNodeFilter>false</successOnEmptyNodeFilter>
<threadcount>1</threadcount>
</dispatch>
<executionEnabled>true</executionEnabled>
<id>3fa71d29-e3bc-453c-a8a7-cb9e95d0a8dd</id>
<loglevel>INFO</loglevel>
<name>ChildJob</name>
<nodeFilterEditable>false</nodeFilterEditable>
<nodefilters>
<filter>name: node01</filter>
</nodefilters>
<nodesSelectedByDefault>true</nodesSelectedByDefault>
<plugins />
<scheduleEnabled>true</scheduleEnabled>
<sequence keepgoing='false' strategy='node-first'>
<command>
<exec>echo "the rundeck server is: ${option.rdeck_srv}</exec>
</command>
</sequence>
<uuid>3fa71d29-e3bc-453c-a8a7-cb9e95d0a8dd</uuid>
</job>
</joblist>
父作业(获取服务器名称并将其传递给子作业):
<joblist>
<job>
<defaultTab>nodes</defaultTab>
<description></description>
<executionEnabled>true</executionEnabled>
<id>e8bb217c-ec91-418a-aec5-16df83dbcf82</id>
<loglevel>INFO</loglevel>
<name>RundeckServerName</name>
<nodeFilterEditable>false</nodeFilterEditable>
<plugins />
<scheduleEnabled>true</scheduleEnabled>
<sequence keepgoing='false' strategy='node-first'>
<command>
<fileExtension>.sh</fileExtension>
<plugins>
<LogFilter type='key-value-data'>
<config>
<invalidKeyPattern>\s|\$|\{|\}|\\</invalidKeyPattern>
<logData>true</logData>
<regex>^(grails.serverURL)=*(.+)$</regex>
</config>
</LogFilter>
</plugins>
<script><![CDATA[cat /etc/rundeck/rundeck-config.properties | grep 'grails.serverURL']]></script>
<scriptargs />
<scriptinterpreter>/bin/bash</scriptinterpreter>
</command>
<command>
<fileExtension>.sh</fileExtension>
<script><![CDATA[echo "Rundeck URL is: @data.grails.serverURL@"]]></script>
<scriptargs />
<scriptinterpreter>/bin/bash</scriptinterpreter>
</command>
<command>
<jobref name='ChildJob' nodeStep='true'>
<arg line='-rdeck_srv ${data.grails.serverURL}' />
<uuid>3fa71d29-e3bc-453c-a8a7-cb9e95d0a8dd</uuid>
</jobref>
</command>
</sequence>
<uuid>e8bb217c-ec91-418a-aec5-16df83dbcf82</uuid>
</job>
</joblist>
Here 结果。
,另一种方法:在 key storage 中将其设置为“密码”。
设置一个包含该服务器 URL 的密钥。在每个作业中,设置一个类型为“安全”的 option。当您选择安全时,它将激活一个选择器以从密钥存储中选择要使用的密钥(请参阅 this)。如果您将选项设置为“必需”和“隐藏”,它不会显示在作业运行页面上,但会在脚本/命令中可用。
这是一个示例作业:
<joblist>
<job>
<context>
<options preserveOrder='true'>
<option name='ServerURL' required='true' secure='true' storagePath='keys/pso/server_url' valueExposed='true'>
<hidden>true</hidden>
</option>
</options>
</context>
<defaultTab>output</defaultTab>
<description>Domonstrate using getting a variable from a key</description>
<dispatch>
<excludePrecedence>true</excludePrecedence>
<keepgoing>false</keepgoing>
<rankOrder>ascending</rankOrder>
<successOnEmptyNodeFilter>false</successOnEmptyNodeFilter>
<threadcount>1</threadcount>
</dispatch>
<executionEnabled>true</executionEnabled>
<group>Testing stuff</group>
<id>51b63a65-91f5-43ba-aeb9-8d640fc7a98f</id>
<loglevel>INFO</loglevel>
<name>Test job</name>
<nodeFilterEditable>false</nodeFilterEditable>
<nodefilters>
<filter>.*</filter>
</nodefilters>
<nodesSelectedByDefault>true</nodesSelectedByDefault>
<orchestrator>
<configuration>
<count>1</count>
</configuration>
<type>subset</type>
</orchestrator>
<plugins />
<scheduleEnabled>true</scheduleEnabled>
<schedules />
<sequence keepgoing='false' strategy='node-first'>
<command>
<description>Script example</description>
<script><![CDATA[echo "This is being run from:"
echo @option.ServerURL@]]></script>
<scriptargs />
</command>
</sequence>
<timeZone>US/Central</timeZone>
<uuid>51b63a65-91f5-43ba-aeb9-8d640fc7a98f</uuid>
</job>
</joblist>