Git&Jenkins:ブランチで最新のグリーンコミットを取得


10

CI-CDを推進し始めたばかりであり、新しいステップとして、スタックを最新のグリーン開発で数時間に1回更新することを試みます。私はGit / Bitbucketにかなり慣れていないため、Jenkinsが行うチェックアウトで、「最後のコミット」がブランケットステートメントとしてだけでなく、Jenkinsによって緑色にマークされていることを確認する方法を理解できません。

我々は持っているのNotifierのBitbucketのビルド・ステータスのBitbucketは、コミットが私たちのユニットテストを実行した後に緑のあるトラックを行いますので、インストールされたプラグインを。この情報を活用して正しいコミットが選択されていることを確認する方法はありますか?

回答:


6

使用するスクリプト言語については何も触れていないので、特にBitBucket APIへのHTTPリクエストについて説明します。

仮定

最初と最後の3つのコミットが含まれているBitBucketリポジトリがある場合、最初と最後のビルドでエラーが発生し、中間は合格です。

  • 4768815❌
  • 49d7110✅
  • ゆうたろう

コミットのリストを取得する

次のAPIメソッドを呼び出すことで、コミットのリストを取得できます。

https://api.bitbucket.org/2.0/repositories/{{owner}}/{{repo_slug}}/commits

  • owner:RichardSlater
  • repo_slug:greencommitproofofconcept

応答は次のようになります。

{
  "pagelen": 30,
  "values": [
    {
      "hash": "4768815fdc27abf4be17096e7c460f7f68f5d39b",
      "repository": { ... },
      "links": {
        ...
        "statuses": {
          "href": "https://api.bitbucket.org/2.0/repositories/RichardSlater/greencommitproofofconcept/commit/4768815fdc27abf4be17096e7c460f7f68f5d39b/statuses"
        }
      },
      "author": { ... },
      "parents": [ ... ],
      "date": "2017-04-10T11:38:18+00:00",
      "message": "README.md edited online with Bitbucket",
      "type": "commit"
    },
    {
      "hash": "49d7110b98616358d16055960a4abdf2926b890d",
      ...
    },
    {
      "hash": "42d357f1df7a7d7bcf1f10a9f3a5a40d85d5b11c",
      ...
    }
  ]
}

JSONを解析して応答をループする場合は、以下からステータスを抽出できます。

values[n].links.statuses.href

nインデックスはどこにありますか、つまり01または2上記の例では。これを最初から作成する場合は、次の形式になります。

コミットからステータスのリストを取得する

https://api.bitbucket.org/2.0/repositories/{{owner}}/{{repo_slug}}/commit/{{sha}}/statuses"

  • owner:RichardSlater
  • repo_slug:greencommitproofofconcept
  • sha:4768815fdc27abf4be17096e7c460f7f68f5d39b

注:これはハイパーメディアAPIであるため、URL 変更される可能性があるため、最初から生成するのではなく、前の応答のリンクを使用することをお勧めします。

上記のHTTPリクエストからの応答は次のようになります。

{
  "pagelen": 10,
  "values": [
    {
      "key": "POC-01",
      "name": "Build #1",
      "repository": { ... },
      "url": "http://devops.stackexchange.com/q/809/397",
      "links": { ... },
      "refname": null,
      "state": "FAILED",
      "created_on": "2017-04-10T13:04:28.261734+00:00",
      "updated_on": "2017-04-10T13:04:28.261759+00:00",
      "type": "build",
      "description": "Changes by Richard Slater"
    }
  ],
  "page": 1,
  "size": 1
}

この応答から、次のものを抽出できますstate

values[n].state

再びどこnであるstatus-は、一つは、多くの中で構築したコミットた場合、それらの多くがあるかもしれません。

あなたが気にするビルドの状態SUCCESSFULがあなたの答えであり、あなたはすぐshaにコミットのためにを返すことができます。

最初のフェーズからすべてのコミットをループします。コミットが不足した場合は、への呼び出しに含まれているnextページに従ってください。link/commits

完全なフロー図

高レベルでは、フローは次のようになります。

流れ図

これはハイパーメディアAPIであることを忘れないでください。可能な限り、コードを「推測」するのではなく、APIのリンクをたどってください。


1
はい、そうです。これはおそらくSEでの私の最も長い回答です。
Richard Slater

あなたが私がそれを望んでいるのは全く狂気だと思っていても、あなたがこれを説明するのに費やした時間に感謝します。承認済み
アレックス

完全に正気ではなく、最初の数ステップを実行するだけです。CI/ CDアーキテクチャについて考えるときは、他の答えを覚えておいてください。
Richard Slater

3

典型的な継続的デリバリー/デプロイメントパイプラインでは、次のことが起こります。

  1. 開発者が1つ以上のコミットをプッシュするか、プルリクエストがマージされます。
  2. Jenkinsは自動的にテストをビルドして実行します。
  3. 成功した場合、ジェンキンスはデプロイメントパッケージをアーティファクトリポジトリに公開します。失敗した場合は何も公開されず、開発者に通知します。
  4. デプロイメントの自動化は、Artefactリポジトリーからのパッケージを使用して、それらをデプロイします。

シンプルなCI / CDパイプライン

目標は回避することです構築するあなたは何回もそれを一度構築し、それを展開し、二回ソースからのソリューションを。Sonartype Nexusに承認を実装して、環境承認プロセスを定義できます。つまり、開発→テスト→UAT→ステージ→本番です。

つまり、以前のすべてを読んでいて、ソース管理から最新のグリーンビルドを取得したい場合は、次の2つの方法のいずれかを使用できます。

  1. Jenkinsに適切な名前のタグを付けてブランチにタグを付けます。つまり、最新のグリーンビルドが必要なときmaster-greenではなく、そのタグを使用しmasterます。
  2. BitBucket コミットを使用して、コミットのリストを取得し、コミットごとにcommit / {sha} / statusesを実行して、ステータスがGreenのコミットを見つけます。私は別の答えでこのソリューションを拡張しました。

上記のアプローチの具体的な使用方法については、フォローアップの質問を投稿してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.