微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在脚本中获取服务器 URL

如何解决在脚本中获取服务器 URL

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。