【问题标题】:How to run shell commands with variables in Jenkinsfile如何在 Jenkinsfile 中使用变量运行 shell 命令
【发布时间】:2020-08-03 05:04:09
【问题描述】:

我想在 Jenkins 文件中作为管道在多个服务器上运行以下命令以获取报告我是 Jenkins 新手,想知道如何编写 Jenkins 文件

Shell 命令: 主机名=$(主机名) DATE=$(日期 "+%d-%m-%y %H:%M:%S") CPUUSAGE=$(top -b -n 1 -d1 | grep "Cpu(s)" |awk '{print $2}' | awk -F.'{print $1}') MEMUSAGE=$(free |grep Mem |awk '{print $3/$2 * 100.0}')

我尝试过的:

pipeline {  
agent {label 'server1,server2'}
     environment {
        def CPUUSAGE=0;
        def MEMUSAGE=0;
        
    }
    stages {
    stage('Check System Usage') {
        steps {
            script {
                 CPUUSAGE = sh '''"top -bn1 | grep load | awk '{printf "%.2f%%\t\t\n", $(NF-2)}'", returnStdout: true).trim()'''
                 MEMUSAGE = sh '''"free -m | awk 'NR==2{printf "%.2f%%\t\t", $3*100/$2 }'", returnStdout: true).trim()'''
                 END { printf( "\n" ); }'", returnStdout: true).trim()'''
                 println("CPUUSAGE = ${CPUUSAGE}","MEMUSAGE = ${MEMUSAGE}")
            }
        }
    }
}

请帮忙 谢谢 萨玛

【问题讨论】:

    标签: shell jenkins jenkins-pipeline sh jenkins-groovy


    【解决方案1】:
    pipeline {  
      agent {label 'server1,server2'}
      environment {
        def CPUUSAGE=0;
        def MEMUSAGE=0;
      }
      stages {
        stage('Check System Usage') {
          steps {
            script {
              def  CPUUSAGE_SCRIPT = '''
                top -bn1 | grep load | awk '{printf "%.2f%%\t\t\n", $(NF-2)}'
              '''
    
              def MEMUSAGE_SCRIPT = '''
                free -m | awk 'NR==2 {printf "%.2f%%\t\t", $3*100/$2} END {printf "\n"}'
              '''
              CPUUSAGE = sh(script: CPUUSAGE_SCRIPT, returnStdout: true).trim()
              MEMUSAGE = sh(script: MEMUSAGE_SCRIPT, returnStdout: true).trim()
    
              println("CPUUSAGE = ${CPUUSAGE}, MEMUSAGE = ${MEMUSAGE}")
            }
          }
        }
      }
    }
    

    【讨论】:

    • 你好勇我遇到错误,试图在 " 之前添加 \ 但它没有帮助 top -bn1 | grep load | awk '{printf \"%.2f%%\t\t\n ", $(NF-2)}' + top -bn1 + grep load + awk '{printf "%.2f%% ", $(NF-2)} END {printf " "}' awk: cmd. line: 1: {printf"%.2f%% awk: cmd. line:1: ^ 未终止的字符串 awk: cmd. line:1: {printf "%.2f%% awk: cmd.line:1: ^ 语法错误任何建议
    【解决方案2】:

    检查这个:

    pipeline {  
    agent any
         environment {
            CPUUSAGE = sh(script: 'top -bn1 | grep load', returnStdout: true).trim()
            MEMUSAGE = sh(script: 'free -m', returnStdout: true).trim()
        }
        stages {
            stage('Check System Usage') {
                steps {
                    echo "CPUUSAGE = $CPUUSAGE"
                    echo "MEMUSAGE = $MEMUSAGE"
                }
            }
        }
    }
    

    但是您需要检查您的完整脚本。这些简短的脚本对我有用。

    【讨论】:

      猜你喜欢
      • 2017-05-23
      • 2016-08-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-29
      • 2022-10-21
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多