通过Jenkins推送到Heroku的教程

时间:2013-05-30 15:30:57

标签: heroku groovy jenkins

所有人都知道任何关于让Jenkins与Heroku很好地玩的好文章吗?

我想做什么:     1)当签入开发者分支时,想要设置一个jenkins工作来轮询私人GitHub Repo。     2)建立这个分支,确保一切都很好!     3)将私有GitHub Repo代码库推送到Heroku Repo。所以它在Heroku上进行构建和部署。

我看过一些文章,但似乎无法让完整的流程发挥作用。我试过GitHub插件& Heroku插件。我可以获得github插件来下拉和构建,但不明白如何推送到Heroku。 Heroku插件允许我部署WAR文件,但这不会正确显示应用程序。所以我需要将代码库推送到Heroku Repo,以便进行编译和部署。

谢谢, d

3 个答案:

答案 0 :(得分:12)

我使用Jenkins推送Heroku用于我们的应用程序。我没有使用Heroku插件,我喜欢'Execute Shell'给我的控件。这是一个相当详细的答案,如果我错过了什么,一定要评论。

1)轮询私人回购:

  • 您的工作应设置为“更改时构建”选项 在“构建触发器”部分下推送到GitHub。
  • 在GitHub上转到您的项目页面,然后单击中的“设置”菜单 标题(必须具有管理员权限)。在该页面的左侧边栏中,单击“服务挂钩”。 这将带您进入可以选择的挂钩列表。选择'Jenkins(GitHub插件)'。
  • 添加jenkins服务器的回调URL(保留该页面以供日后使用)。类似的东西:

    http://jenkins.example.com/github-webhook/

  • 您可以通过添加Jenkins的“日志记录器”来测试回调,方法是转到Jenkins | Manage Jenkins | System Log。单击“添加新日志记录器”
  • 输入'test hook',将记录器设置为'com.cloudbees.jenkins.GitHubWebHook',将日志级别设置为'全部'
  • 返回GitHub,然后点击“Test Hook”,然后您可以看到回调日志以确认您的挂钩正在运行。

2)建立分支机构。确保设置了所有GitHub配置,因为只有在完成这些设置后,回调才会触发作业。

  • 在“源代码管理”部分,选择“Git”选项并填写您的回购详情,例如'git@github.com:...'
  • 在“构建触发器”部分中,选择“将更改推送到GitHub时构建”

3)推送到Heroku。这里要考虑几件事。

  • 您需要确保您的工作添加了Heroku远程仓库。创建新作业时,这是一次性操作,不需要为每个构建完成。例如:
heroku git:remote -a myApp
git remote add heroku git@heroku.com:myApp.git

使用上面的内容创建一个Execute Shell脚本,仅用于第一次构建。

  • 如果您有Ping目标(New Relic),请在部署期间禁用它们,以避免错误通知您的应用已关闭。
curl https://heroku.newrelic.com/accounts/ACCTID/applications/APPID/ping_targets/disable -X POST -H "X-Api-Key: APIKEY"

不要忘记在以下之后重新开启:

curl https://heroku.newrelic.com/accounts/ACCTID/applications/APPID/ping_targets/enable -X POST -H "X-Api-Key: APIKEY"
  • 对应用程序中的维护模式执行相同操作
heroku maintenance:on --app myApp
heroku maintenance:off --app myApp

将这些放在一起,Jenkins上的典型部署脚本可能如下所示:

#one off to ensure heroku remote is added to repo
heroku git:remote -a myApp
git remote add heroku git@heroku.com:myApp.git
#disbales
curl https://heroku.newrelic.com/accounts/ACCTID/applications/APPID/ping_targets/disable -X POST -H "X-Api-Key: APIKEY"
heroku maintenance:on --app myApp
#push to heroku
git push --force heroku master
heroku run rake db:migrate --app myApp
#enables
curl https://heroku.newrelic.com/accounts/ACCTID/applications/APPID/ping_targets/enable -X POST -H "X-Api-Key: APIKEY"
heroku maintenance:off --app myApp

答案 1 :(得分:10)

作为使用上面概述的Heroku API进行部署的替代方法,您只需将代码推送到远程Git存储库(即Heroku为您的应用定义的存储库)作为构建后操作。因此,您的工作将定义两个Git存储库 - 一个是您的Github存储库,另一个是Heroku存储库。

enter image description here

为Heroku存储库命名,例如' heroku'在Post-Build Actions部分中,使用Git发布者。请务必在目标远程名称字段中选择heroku名称。 enter image description here

根据您在Github项目上设置构建触发器的方式,当构建完成时,Jenkins会将生成的快照推送到Heroku存储库,从而实现部署。

答案 2 :(得分:1)

首先,您应该切换项目以使用ssh-key进行身份验证,并将您的公共ssh-key添加到您的heroku帐户:

heroku git:remote --ssh-git
heroku keys:add

git remote -v
heroku  git@heroku.com:your-project.git (fetch)
heroku  git@heroku.com:your-project.git (push)

您可以找出在Jenkins配置中用作存储库URL的URL。然后按照@Andy Glover(另请参阅http://thediscoblog.com/blog/2014/01/24/continuous-delivery-for-heroku-with-jenkins/)的答案中的说明配置Jenkins。

最后,为了让Jenkins能够推送到Heroku的git存储库,你应该让你的Jenkins管理员给你执行你Jenkins作业的root / jenkins用户的公共ssh密钥。通过Heroku dashboard将此公钥添加到您的Heroku帐户。如果您的构建作业成功,Jenkins将能够推送到您的Heroku帐户,从而实现部署。