You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过命令行修改Jenkins环境变量并存储动态脚本版本号?

如何通过命令行修改Jenkins全局环境变量

明确说:完全可以通过命令行修改Jenkins全局环境变量,除了UI和流水线设置外,还有几种实用方案,适配你动态更新版本号的需求:

方案1:用Jenkins CLI工具直接修改全局配置

Jenkins自带的CLI工具可以直接读写全局配置,步骤如下:

  1. 先导出当前全局配置XML(替换成你的Jenkins地址):
    java -jar jenkins-cli.jar -s http://your-jenkins-url get-global-config > config.xml
    
  2. 编辑config.xml,找到<globalNodeProperties>节点,添加或修改环境变量。比如要设置APP_VERSION:
    如果该节点下还没有环境变量配置,就添加这段:
    <hudson.slaves.EnvironmentVariablesNodeProperty>
      <envVars serialization="custom">
        <unserializable-parents/>
        <tree-map>
          <default>
            <comparator class="hudson.util.CaseInsensitiveComparator"/>
          </default>
          <entry>
            <string>APP_VERSION</string>
            <string>1.2.3</string> <!-- 替换成你的动态版本号 -->
          </entry>
        </tree-map>
      </envVars>
    </hudson.slaves.EnvironmentVariablesNodeProperty>
    
    要是已经有这个节点,直接修改对应<entry>里的版本号就行。
  3. 把修改后的配置推回Jenkins:
    java -jar jenkins-cli.jar -s http://your-jenkins-url set-global-config < config.xml
    
    注意:操作需要管理员权限,可通过--username和--password(或API token)参数做身份认证。

方案2:调用Jenkins REST API动态修改

适合直接和你的shell脚本集成,全程用HTTP请求操作:

  1. 先拉取当前全局配置:
    curl -u admin:your-api-token http://your-jenkins-url/config.xml > config.xml
    
  2. 用sed工具动态替换版本号(假设你的脚本里有NEW_VERSION变量):
    sed -i "s/<string>APP_VERSION<\/string>\s*<string>[^<]*<\/string>/<string>APP_VERSION<\/string><string>$NEW_VERSION<\/string>/g" config.xml
    
  3. 把修改后的配置POST回Jenkins:
    curl -X POST -u admin:your-api-token -H "Content-Type: text/xml" --data-binary @config.xml http://your-jenkins-url/config.xml
    

方案3:执行Groovy脚本修改(更灵活)

Jenkins支持通过Groovy脚本直接操作内部配置,不用手动编辑XML:
通过CLI执行Groovy脚本(替换$NEW_VERSION为你的动态版本号):

echo "import jenkins.model.Jenkins
import hudson.slaves.EnvironmentVariablesNodeProperty
import hudson.EnvVars

def jenkins = Jenkins.get()
def globalNodeProperties = jenkins.getGlobalNodeProperties()
def envVarsNodeProperty = globalNodeProperties.get(EnvironmentVariablesNodeProperty.class)

if (envVarsNodeProperty == null) {
  envVarsNodeProperty = new EnvironmentVariablesNodeProperty()
  globalNodeProperties.add(envVarsNodeProperty)
}

def envVars = envVarsNodeProperty.getEnvVars()
envVars.put('APP_VERSION', '$NEW_VERSION')

jenkins.save()" | java -jar jenkins-cli.jar -s http://your-jenkins-url groovy =

注意事项

  • 所有操作需要管理员权限,确保你的账号有权限修改全局配置。
  • 修改后Jenkins会自动加载新配置,无需重启,但正在运行的流水线需要重新触发才能获取最新变量。
  • 如果只是单条流水线需要版本号,也可以在流水线里直接调用你的shell脚本取值,但要让所有Jenkinsfile都能访问,全局环境变量是最优选择。

内容的提问来源于stack exchange,提问作者Roshan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 06:08:22