在脚本中获取服务器 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>