我正在使用 hudson 将我的 Rails 应用程序自动部署到 heroku。在我的主要构建作业中,我从 Git 存储库(在同一台计算机上使用 gitosis 托管)中提取了以下内容的 master 分支:
URL of repository: /home/git/repositories/my_app.git
Name of repository: origin
Refspec: +refs/heads/master:refs/remotes/origin/master
Branches to build: master
然后,假设所有测试都通过,我想启动一个部署到 Heroku 的新构建。
但是,我不知道如何让部署构建签出此构建所使用的特定修订版本。我知道有一个参数化的触发器插件可以让我传递此修订版本号,但我不知道如何告诉 hudson 在部署构建上签出此特定修订版本。
我很确定这只是与我对 git 的有限了解有关,但是在 hudson git 配置的哪里可以选项来检出特定的修订版本?
否则,我可能会在构建过程中发生许多提交,并且当它启动部署构建时,该部署构建只会检出分支的 HEAD,这可能与触发此构建的推送的代码不同。
我不完全理解为什么我在 Hudson 中有一个 refspec,然后还指定要构建的分支,我认为这是同一件事。refspec 能以某种方式指定修订号吗?如果它通过参数化触发器插件传递,将如何引用它?
(我从未使用过该插件,但其他人推荐它作为将变量传递给新版本的方法,如果有其他方法我很乐意听取)
答案1
我认为你可以更轻松地做到这一点,通过在 Hudson 中设置步骤来运行测试,然后推动,如果您的测试在失败时返回非零退出。这有效,因为我认为一旦出现故障(非零退出状态),Hudson 就会停止执行构建步骤链。
答案2
看这里了解 git 的解释。
顺便问一下,您是否将可部署的工件存储在 git 中,或者在部署之前重建应用程序?否则,让您的第一项工作将工件推送到存储库(可能与源代码的存储库不同,我们在文件系统上有一个指定的空间),第二项工作将其从存储库中提取并部署。