【问题标题】:Jenkins: automatically rebase master on test then push if test succesful with jenkins pipeline詹金斯:在测试中自动重新调整主基础,然后如果使用詹金斯管道测试成功则推送
【发布时间】:2022-01-08 02:33:23
【问题描述】:

对于我的 ETL 脚本,我使用的是持续开发基础架构:如果测试工作流成功,则意味着可以将其推送到生产环境中,然后在夜间运行,如果测试不成功,则更改不会已推送,但生产脚本仍在运行。

到目前为止,每次成功更改时,我都会手动将我的测试分支重新定位到我的主分支。我想自动执行此操作,以便在测试管道作业完成并成功后,Jenkins 会自动在测试分支上重新设置主分支并将其推送到远程存储库。

这是我当前的 jenkins 管道代码模型 (Jenkinsfile_test):

def gv

pipeline {
    agent any

    stages{
        stage("init") {
            steps {
                script {
                    gv = load "script.groovy"
                }
            }
        }
        stage("01_test1") {
            when {
                changeset "**/01_test1/**"
            }            
            steps {
                script { 
                    gv.test1()
                }
            }
        }
        stage("02_test2") {
            when {
                changeset "**/02_test2/**"
            }
            steps {
                script {
                    gv.test2()
                }
            }
        }
    }
    post {
        success {
                echo "success"
                withCredentials([usernamePassword(credentialsId: 'xxx',
                                 usernameVariable: 'xxx',
                                 passwordVariable: 'xxx')]){
                sh "git checkout master"
                sh "git rebase test"
                sh("git push http://$username:$password@http://git-server/test.git test")
            }
        }
    }
}

我尝试了在这里找到的解决方案:Is it possible to Git merge / push using Jenkins pipeline

但它不起作用。我实际上不知道如何设置我的成功步骤。

以下是我在运行 jenkins 管道作业时遇到的错误:

Error when executing success post condition:
java.io.IOException: CreateProcess error=2, The system cannot find the file specified

Caused: java.io.IOException: Cannot run program "nohup" (in directory "C:\Program Files 
(x86)\Jenkins\workspace\test_pipeline")

任何帮助将不胜感激。

【问题讨论】:

    标签: git jenkins


    【解决方案1】:

    “'nohup' not found 错误”的主要原因似乎是 Windows 不支持 sh 步骤。例如,您可以使用bat 或安装Cygwin。看到这个answer.

    使用bat 应该可以这样工作:

    post {
            success {
                    echo "success"
                    withCredentials([usernamePassword(credentialsId: 'xxx',
                                     usernameVariable: 'xxx',
                                     passwordVariable: 'xxx')]){
                    bat "git checkout master"
                    bat "git rebase test"
                    bat("git push http://$username:$password@http://git-server/test.git test")
                }
            }
        }
    

    【讨论】:

    • 感谢确实是 shell 脚本不工作:这是我更改的内容,现在它正在工作:bat "git.exe checkout master" bat "git.exe rebase origin/test" bat " git.exe push git-server/test.gitmaster"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-16
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多