【问题标题】:How to run shell script in jenkins pipeline如何在詹金斯管道中运行shell脚本
【发布时间】:2020-09-14 07:10:00
【问题描述】:

我想从 jenkins 管道运行 shell 脚本,而不是调用 shell 脚本,我可以像下面一样一一运行 sh 命令

top -bn1 | grep load | awk '{printf "%.2f%%\t\t\n", $(NF-2)}'
free -m | awk 'NR==2{printf "%.2f%%\t\t", $3*100/$2 }'
iostat -c 3 3 |awk '/^ /{print $4}'|awk  '{ printf( "%s ", $1 ); } END { printf( "\n" ); }'

我是 jenkins 的新手,但是当我尝试将它与 sh 一起使用时,就像下面给出的错误一样

pipeline {
    agent any
    stages {
        stage('Check System Usage') {
            steps {
                script {
                     def CPUUSAGE = sh (script: "top -bn1 | grep load | awk '{printf "%.2f%%\t\t\n", $(NF-2)}'", returnStdout: true).trim() as Integer
                     def MEMUSAGE = sh (script:free -m | awk 'NR==2{printf "%.2f%%\t\t", $3*100/$2 }'", returnStdout: true).trim() as Integer
                     def IOWAIT = sh (script:"iostat -c 3 3 |awk '/^ /{print $4}'|awk  '{ printf( "%s ", $1 ); } END { printf( "\n" ); }'", returnStdout: true).trim() as Integer
                     println("CPUUSAGE = ${CPUUSAGE}","MEMUSAGE = ${MEMUSAGE}","IOWAIT = {IOWAIT}")
                }
            }
        }
    }
}

您能否指导在 jenkins 文件中运行 shell 命令的确切格式是什么,或者您可以分享示例代码以供参考。

【问题讨论】:

  • awk 命令之后没有额外的引用" 吗?
  • CPUUSAGE,你不能逃避引用,我认为你应该(内部" --> \"
  • @Mathieu 你能指导一下我到底做错了什么,因为它在 Linux 终端上工作正常,我是 jenkins 的新手,不确定 linux 终端是如何工作的,出现非法字符串体错误

标签: linux shell jenkins jenkins-pipeline


【解决方案1】:

你使用的“”和''不正确。

【讨论】:

    【解决方案2】:

    阅读https://www.jenkins.io/doc/book/pipeline/https://code-examples.net/en/q/237ec14,我会尝试:

    pipeline {
        agent any
        stages {
            stage('Check System Usage') {
                steps {
                    script {
                        bash'''#!/bin/bash 
                            CPUUSAGE=$(top -bn1 | grep load | awk '{printf "%.2f%%\t\t\n", $(NF-2)}')
                            MEMUSAGE=$(free -m | awk 'NR==2{printf "%.2f%%\t\t", $3*100/$2 }')
                            IOWAIT=$(iostat -c 3 3 |awk '/^ /{print $4}'|awk  '{ printf( "%s ", $1 ); } END { printf( "\n" ); }')
                            echo("CPUUSAGE = ${CPUUSAGE}","MEMUSAGE = ${MEMUSAGE}","IOWAIT = {IOWAIT}")
                        '''
                    }
                }
            }
        }
    }
    

    【讨论】:

    • 我认为bash'''#!/bin/bash 会在 Jenkins Pipeline 中给你一个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多