首页 > 解决方案 > 从管道中的 git 提交消息中删除特殊字符

问题描述

我正在编写 jenkins 管道我需要获取提交消息并从此消息中删除文件名的非法符号

    stages {
       stage('Get_commit_msg') {
           steps {
               script {
                   git_commit_msg= sh (script: 'git log -1 --pretty=%B ${GIT_COMMIT}', returnStdout: true).trim()

               }
           }
        }
       stage ('3 - Database backup') {
            steps {
                script {
                    sshPublisher(
                        continueOnError: false, failOnError: true,
                            publishers: [
                                sshPublisherDesc(
                                    configName: "${env.SSH_CONFIG_NAME}",
                                    verbose: true,
                                    transfers: [
                                        sshTransfer(
                                            sourceFiles: "",
                                            removePrefix: "",
                                            remoteDirectory: "",
                                            execTimeout: "1200000",
                                            execCommand:
                                            """
                                            sudo mysqldump -u ${env.DATABASE_USER} ${env.DATABASE_NAME} --result-file=before_${git_commit_msg}_${env.DATE}.sql
                                            """
                                        )
                                    ]
                                )
                            ]
                    )
                }
            }
       }
    }

我有一个错误

bash:-c:第 1 行:意外标记附近的语法错误(' bash: -c: line 1: sudo mysqldump -u root timesheets --result-file=before_Th(is) i#st$e%st m^&*e{}[]ss!age_$( date '+%F').sql' SSH: EXEC: 401 ms 后完成

如果我使用

            steps {
                script {
                    sh "git_commit_msg=echo $git_commit_msg | tr -d '[:cntrl:]'"
                }
            }
       }```

get error

/var/jenkins_home/workspace/pipeline@tmp/durable-aded948a/script.sh: line 1: syntax error: unexpected "("

please help

标签: bashgitjenkins-pipeline

解决方案


tr可以帮助您用占位符替换所有非字母数字字符:

git_commit_msg = sh(
    script: 'git log -1 --pretty=%B ${GIT_COMMIT} | tr -c "[[:alnum:]]" @', 
    returnStdout: true
).trim()

您可以根据需要对其进行调整:

TR(1)

姓名
       tr - 翻译或删除字符

概要
       tr [选项]... SET1 [SET2]

描述
       翻译、压缩和/或删除标准输入中的字符,写入标准输出。

       -c,-C,--补码
              使用 SET1 的补码
...
       [:铝:]
              所有字母和数字
...

推荐阅读