我使用 Jenkins 为我们的应用推送到 Heroku。我不使用 Heroku 插件,我喜欢 'Execute Shell' 给我的控制。这是一个相当详细的答案,如果我错过了什么,请务必发表评论。
1)轮询私人回购:
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