GitHub Deployments API
12452 단어 GitHub
Deployments 및 Deployment State
Deployments는 특정 branch, sha, tag의 depro 요청을 말합니다.
Deployment Status는 Commiit Status와 같습니다.
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 | |
| |<----------------------| |
| | | |
Deployments 및 Deployment Station 사용 방법 설명도
예를 들어 topic 지점을 설계하고 싶다
pending
의 Deployment Statussuccess
필요 권한
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",
)
감상과 필기
deply 이력서만 사용한다면 Circle CI, Wercker, New Relic의 depro 기능도 좋지만 이 API는 자유도가 높은 것이 좋다.응용 프로그램의 deploy뿐만 아니라 operation도 아래
task
attribute를 보유하게 하면 어떤 검사를 거친 operation 코드만 실행하고 DB를 사용하지 않고 실행된 operation의 어떤 역사를 만듭니까?토픽 브랜치를 디자인하면 이런 느낌으로pull request deployment 이벤트가 나와요.정보
environment
environment
도 미리 지정하면 deployments 일람을 얻어 staging의 것만 필터하면 staging의 depro 이력이 된다.정보
target_url
payload
task
이런attributeAPI 문서에 오래된 것으로 기재되지 않았지만
task
이런attribute가 있습니다. 기본값은 deploy
입니다.capistrano 등을 사용하면 deployment 이벤트를 만든 후 어떤 라크 작업을 수행해야 하는지 알려주는 것이 편리합니다.정보
required_context
정보
auto_merge
true
입니다.GiitHub은 topic 지점의 디버깅 테스트를 할 때 최종적으로 마스터에 표시를 하기 때문에 topic 지점의 디자인을 할 때 이미 표시된 물건을 디버깅하고 테스트를 하는 것을 들은 적이 있다.따라서 메르지 마스터가 없는 토픽 지점은 자동으로 마스터를 시작합니다.이런 느낌으로 automerge commiit 만들기.REF
Reference
이 문제에 관하여(GitHub Deployments API), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/spesnova/items/9a9584bb2857adb2e35c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)