在脚本中获取服务器 URL
Get the server URL in a script
如何在脚本中获取服务器 URL?
我可以获取项目@job.project@和id @job.id@,但我想获取URL.
我们有不同的开发实例和生产实例,我想在输出中的作业中包含一个 link,该作业记录在不同的系统中,而无需在脚本推出时更新它。
你可以建议 here.
或者,您可以从 rundeck-config.properties
文件中提取值并将其存储在 data 值上(以在以后的任何 step/job 中使用),我留下一个作业定义示例:
命令步骤:
<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.
将数据值作为参数传递
子作业(调度commands/scripts到另一个节点):
<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 that is type 'secure'. When you select secure, it will activate a selector to choose which key to use from key storage (see this)。如果您将选项设置为“必需”和“隐藏”,它将不会显示在工作 运行 页面上,但会在 script/command.
中可用
这是一个示例作业:
<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>
如何在脚本中获取服务器 URL?
我可以获取项目@job.project@和id @job.id@,但我想获取URL.
我们有不同的开发实例和生产实例,我想在输出中的作业中包含一个 link,该作业记录在不同的系统中,而无需在脚本推出时更新它。
你可以建议 here.
或者,您可以从 rundeck-config.properties
文件中提取值并将其存储在 data 值上(以在以后的任何 step/job 中使用),我留下一个作业定义示例:
命令步骤:
<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.
将数据值作为参数传递子作业(调度commands/scripts到另一个节点):
<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 that is type 'secure'. When you select secure, it will activate a selector to choose which key to use from key storage (see this)。如果您将选项设置为“必需”和“隐藏”,它将不会显示在工作 运行 页面上,但会在 script/command.
中可用这是一个示例作业:
<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>