GitHub Deployments API

12452 단어 GitHub

Deployments 및 Deployment State


Deployments는 특정 branch, sha, tag의 depro 요청을 말합니다.
Deployment Status는 Commiit Status와 같습니다.
  • "success"
  • "failure"
  • "error"
  • "pending"
  • 이런 표지는 Deployment에 추가됩니다.deployment_status 이벤트에서 이 항목을 얻습니다.
    Deployments와 Deployment Status는 모두 Repository 이벤트와 연결되어 있습니다.
    +---------+             +--------+            +-----------+        +-------------+
    | Tooling |             | GitHub |            | 3rd Party |        | Your Server |
    +---------+             +--------+            +-----------+        +-------------+
         |                      |                       |                     |
         |  Create Deployment   |                       |                     |
         |--------------------->|                       |                     |
         |                      |                       |                     |
         |  Deployment Created  |                       |                     |
         |<---------------------|                       |                     |
         |                      |                       |                     |
         |                      |   Deployment Event    |                     |
         |                      |---------------------->|                     |
         |                      |                       |     SSH+Deploys     |
         |                      |                       |-------------------->|
         |                      |                       |                     |
         |                      |   Deployment Status   |                     |
         |                      |<----------------------|                     |
         |                      |                       |                     |
         |                      |                       |   Deploy Completed  |
         |                      |                       |<--------------------|
         |                      |                       |                     |
         |                      |   Deployment Status   |                     |
         |                      |<----------------------|                     |
         |                      |                       |                     |
    
  • GiitHub 자체는 디버깅 작업을 수행하지 않음
  • 제3party 도구와 depuri-vent의integration
  • 을 책임진다
  • 여러 도구로 판매상 엔진 수신 가능
  • Deployments 및 Deployment Station 사용 방법 설명도


    예를 들어 topic 지점을 설계하고 싶다
  • 디자인 topic 분기(SHA:XXXXX)의 Deployment 만들기
  • Deployment id 400,
  • Deployment Event 작성
  • 제작 표시 id400의 Deployment 상태pending의 Deployment Status
  • 실제 디버깅 시작
  • 디버깅 성공
  • 제작 id400의 Deployment Statussuccess
  • Deployment has many Deployment Status

    필요 권한


    Deployments와 Deployments Status에 필요한 OAuth 범위는
  • repo_deployment
  • repo 작용경이 필요 없다

    Develper Preview의 Accept입니다.

    deployments = client.list_deployments(
      "wantedly/wantedly",
      accept: "application/vnd.github.cannonball-preview+json"
    )
    

    Deployments API


    다음은 "octokit"gem 처리를 사용하는 예입니다

    List Deployments

    client = Octokit::Client.new(
      access_token: <token>
    )
    
    client.list_deployments("user/repo")
    

    Create a Deployments

    client = Octokit::Client.new(
      access_token: <token>
    )
    
    payload = {
      release_version: 1,
    }.to_json
    
    client.create_deployment(
      "wantedly/wantedly",
      "21455649bbbacdb370f1c53cbbd90b6772bef804",
      {
        payload: payload,
        task: "deploy",
        environment: "production",
      }
    )
    
    처리 대상 ref의 Commiit Status가 failure인 경우 Create 실패
    Octokit::Conflict: POST https://api.github.com/repos/wantedly/wantedly/deployments: 409 - Conflict: Commit status checks failed for master.
    Error summary:
      contexts: [{:context=>"continuous-integration/wercker", :state=>"failure"}]
      resource: Deployment
      field: required_contexts
      code: invalid // See: https://developer.github.com/v3
    
    e.errors
    => [{:contexts=>[{:context=>"continuous-integration/wercker", :state=>"pending"}], :resource=>"Deployment", :field=>"required_contexts", :code=>"invalid"}]
    
    force deploy를 실행하려면 빈 진열을 required_contexts[]required_contexts["continuous-integration/wercker"]쓰면wercker에서 테스트를 통과하지 못한commiitstatus가failure가 된다는 것이다.
    따라서 이 검사를 통과해야 하는 대상을 비우면 force deploy가 된다는 뜻으로 이해된다
    client.create_deployment(
      <repo>,
      <ref>,
      {
        environment: "production",
        task: "deploy",
        required_contexts: [],
        description: "deploy request from hubot",
      },
    )
    

    Update a Deployment


    일단 하면 업데이트가 안 돼요.

    Deployment Statuses


    Create a Deployment Status

    client = Octokit::Client.new(
      access_token: <token>
    )
    
    
    client.create_deployment_status(
      "https://api.github.com/repos/wantedly/wantedly/deployments/44167",
      "success",
      {
        target_url: "http://example.com/deployments/1/output",
        description:  "Deployment finished succesfully."
      }
    )
    

    List Deployment Statuses

    client = Octokit::Client.new(
      access_token: <token>
    )
    
    deployment_statuses = client.list_deployment_statuses(
      "https://api.github.com/repos/wantedly/wantedly/deployments/44167",
    )
    

    감상과 필기

  • Deployment API
  • 처음에 괜찮은 것은 개발 이력서에git의commiit가 있고 deployment도github에서 디자인 이력서로 사용된다는 것이다.
    deply 이력서만 사용한다면 Circle CI, Wercker, New Relic의 depro 기능도 좋지만 이 API는 자유도가 높은 것이 좋다.응용 프로그램의 deploy뿐만 아니라 operation도 아래taskattribute를 보유하게 하면 어떤 검사를 거친 operation 코드만 실행하고 DB를 사용하지 않고 실행된 operation의 어떤 역사를 만듭니까?토픽 브랜치를 디자인하면 이런 느낌으로pull request deployment 이벤트가 나와요.
  • Deployment의 ID
  • 처음에 나는 deployment ID를 디자인 버전에 사용하고 싶었지만, Deployment의 ID는 전 사용자/전체 창고에서 유일한 것이다.

  • 정보environment
  • production,staging에서 각각 어떤 Revision이 나타났을 때 deployment를 제작할 때environment도 미리 지정하면 deployments 일람을 얻어 staging의 것만 필터하면 staging의 depro 이력이 된다.

  • 정보target_url
  • 앞으로'몇 시 몇 분의 성공적인 depro 로그를 보고 싶다'는 생각으로 보고 싶은 상황을ChatOps로 depro 로그를 차서 여기서 볼 수 있는 것처럼 사용할 수 있을 것 같습니다.(이 결과를 미리 저장한 장소의 후보는 S3, gist 등)
  • Deployment의payload
  • JSON String을paylad에게 전달합니다.Heroku처럼 환경 변수의 변경을 계획으로 간주하더라도 그 정보는 디자인 이력에 포함되어야 한다.payload에 다양한 설정의 encrypted JSON을 추가하면 가능합니다.
  • Deployment에 task 이런attribute
  • 가 있어요.
    API 문서에 오래된 것으로 기재되지 않았지만 task 이런attribute가 있습니다. 기본값은 deploy입니다.capistrano 등을 사용하면 deployment 이벤트를 만든 후 어떤 라크 작업을 수행해야 하는지 알려주는 것이 편리합니다.

  • 정보required_context
  • GiitHub 문서의 예라면 CI와 안전 검사를 통과한 것만 디버깅을 했습니다.

  • 정보auto_merge
  • 기본값은 true입니다.GiitHub은 topic 지점의 디버깅 테스트를 할 때 최종적으로 마스터에 표시를 하기 때문에 topic 지점의 디자인을 할 때 이미 표시된 물건을 디버깅하고 테스트를 하는 것을 들은 적이 있다.따라서 메르지 마스터가 없는 토픽 지점은 자동으로 마스터를 시작합니다.이런 느낌으로 automerge commiit 만들기.

    REF

  • Preview the New Deployments API
  • Deployments - GitHub API
  • http://rdoc.info/gems/octokit/
  • remind101/tugboat
  • 좋은 웹페이지 즐겨찾기