Git多次提交:Jenkins Pipeline

时间:2017-09-17 14:44:08

标签: git jenkins

我正在尝试使用以下代码在Jenkins管道中的单独提交中提交一些文件:

            sh '''
                git add $SOURCE_ENV/metadetail/current/*
                git commit -m "Updating Snapshot Metadata"
                git add $SOURCE_ENV/release/*
                git commit -m "Package for Release Branch"
                git push -u origin HEAD:$BRANCH_NAME
                git checkout master
                git checkout -b $BRANCH_NAMEfb
                git cherry-pick $BRANCH_NAME
                git push -u origin HEAD:$BRANCH_NAMEfb
            '''

这里的目标是在当前分支上进行两次单独的提交,从master创建一个新的功能分支,然后从原始分支中挑选第二次提交到新分支。 这是在第一次提交后jenkins构建失败,并显示以下消息:

+ git commit -m Updating Snapshot Metadata
HEAD detached from 4b8ea1e
Untracked files:
    dPATCH/release/

nothing added to commit but untracked files present
script returned exit code 1

我不确定发生了什么 - 我的理解是,只有'staging'中的文件在提交时很重要所以不确定为什么当我最初只在子集上运行git add时其他文件被拾取的文件。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

  

我不确定发生了什么

正如我在“Adding git branch as a properties using Gradle on Jenkins”中所提到的,默认情况下,Jenkins会检查HEAD,而不是分支,将其工作空间设置为分离的HEAD模式(因此是您的第一个提交输出)

在开始提交之前,您需要确保签出分支。

请参阅Jenkins issue 6856: Git builds with detached head no matter what

  

大多数管道作业页面左侧的“管道语法”链接将打开一个页面,您可以在其中对执行结帐所需的代码进行原型设计。   使用该列表中的“checkout”选项(而不是“git”选项),然后选择“Git”并为“Check out to specific local branch”添加“Additional Behaviors”。
  然后,您可以设置特定的分支名称,或者可以使用“**”表示它应该使用执行克隆的存储库中的分支名称。