10

Jenkins を Heroku とうまく連携させるための良い記事を知っている人はいますか?

私がやりたいことは次のとおりです。

1) Setup a Jenkins job to poll a private GitHub Repo when check-ins are made to developer branch.
2) Build this branch and make sure everything is good!
3) Push private GitHub Repo codebase to Heroku Repo. So it does the build and deploy on Heroku.

記事の断片を見てきましたが、完全なフローを機能させることができないようです。GitHub プラグインと Heroku プラグインを試しました。GitHub プラグインをプルダウンしてビルドすることはできますが、Heroku にプッシュする方法がわかりません。Heroku プラグインを使用すると WAR ファイルをデプロイできますが、アプリが正しく起動しません。したがって、コードベースを Heroku Repo にプッシュするだけで、コンパイルとデプロイが行われます。

4

3 に答える 3

12

Jenkins を使用して、アプリを Heroku にプッシュしています。Heroku プラグインは使用しません。「シェルの実行」が提供するコントロールが気に入っています。これはかなり詳細な回答です。何か見逃した場合は、必ずコメントしてください。

1) プライベート レポのポーリング:

  • ジョブは、[ビルド トリガー] セクションの下にある [変更が GitHub にプッシュされたときにビルドする] オプションを使用して設定する必要があります。
  • GitHub でプロジェクト ページに移動し、ヘッダーの [設定] メニューをクリックします (管理者アクセスが必要です)。そのページの左側のサイドバーで、[Service Hooks] をクリックします。これにより、選択できるフックのリストが表示されます。「Jenkins (GitHub プラグイン)」を選択します。
  • jenkins サーバーのコールバック URL を追加します (後で使用するためにそのページを開いたままにしておきます)。何かのようなもの :

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

  • Jenkins|Manage Jenkins|System Logに移動して、Jenkinsから「ログレコーダー」を追加することにより、コールバックをテストできます。[新しいログ レコーダーの追加] をクリックします。
  • 「test hook」と入力し、Logger を「com.cloudbees.jenkins.GitHubWebHook」に設定し、ログ レベルを「All」に設定します。
  • GitHub に戻り、[Test Hook] をクリックすると、コールバック ログが表示され、フックが機能していることを確認できます。

2) ブランチをビルドします。これらの設定が完了している場合にのみコールバックがジョブをトリガーするため、すべての GitHub 構成が設定されていることを確認してください。

  • [ソース コード管理] セクションで、[Git] オプションを選択し、リポジトリの詳細を入力します (例: 'git@github.com:...')。
  • [ビルド トリガー] セクションで、[変更が GitHub にプッシュされたときにビルドする] を選択します。

3) Heroku にプッシュします。ここで考慮すべき点がいくつかあります。

  • ジョブに Heroku リモート リポジトリが追加されていることを確認する必要があります。新しいジョブを作成する場合、これは 1 回限りのアクションであり、ビルドごとに実行する必要はありません。例えば ​​:
heroku git:remote -a myApp
git remote add heroku git@heroku.com:myApp.git

最初のビルドでのみ使用するために、上記だけでシェル実行スクリプトを作成します。

  • 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
于 2013-05-30T16:25:39.747 に答える
10

上記のように Heroku API を使用してデプロイする代わりに、ビルド後のアクションとしてコードをリモート Git リポジトリ (つまり、アプリ用に Heroku が定義したもの) にプッシュすることができます。したがって、ジョブは 2 つの Git リポジトリを定義します。1 つは Github リポジトリで、もう 1 つは Heroku リポジトリです。

ここに画像の説明を入力

Heroku リポジトリに「heroku」などの名前を付け、[ビルド後のアクション] セクションで Git パブリッシャーを使用します。[ターゲット リモート名] フィールドで heroku 名を選択してください。 ここに画像の説明を入力

Github プロジェクトで Build Trigger をどのように設定したかに応じて、ビルドが完了すると、Jenkins は結果のスナップショットを Heroku リポジトリにプッシュし、デプロイを行います。

于 2013-12-29T17:44:14.337 に答える
1

最初に、認証に ssh-keys を使用するようにプロジェクトを切り替え、公開 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 ダッシュボードからこの公開鍵をHeroku アカウントに追加します。ビルド ジョブが成功すると、Jenkins は Heroku アカウントにプッシュできるようになり、デプロイが完了します。

于 2015-05-06T15:15:36.260 に答える