본 과제는 Github Actions 사용 추이 통계를 작성하는 과정에서 필요한 데이터를 얻기 위해 추진한 내용이다.
Github API에서는 특정 Repository에 대한 Github Actions 이력을 보여준다.
예시로 https://api.github.com/repos/armyost/testPagePy/actions/runs 와 같이 조회하게 되면 아래와 같은 JSON 데이터 가 나온다.
{
"total_count": 106,
"workflow_runs": [
{
"id": 8049570541,
"name": "Python application",
"node_id": "WFR_kwLOFs44Vs8AAAAB38qy7Q",
"head_branch": "master",
"head_sha": "3120f519ed69e1a05f9e448d8b902ab247e81ae4",
"path": ".github/workflows/python-app.yml",
"display_title": "Python application",
"run_number": 106,
"event": "workflow_dispatch",
"status": "completed",
"conclusion": "success",
"workflow_id": 75286667,
...
},
{
"id": 8049553171,
"name": "Python application",
"node_id": "WFR_kwLOFs44Vs8AAAAB38pvEw",
"head_branch": "master",
"head_sha": "3120f519ed69e1a05f9e448d8b902ab247e81ae4",
"path": ".github/workflows/python-app.yml",
"display_title": "Python application",
"run_number": 105,
"event": "workflow_dispatch",
"status": "completed",
"conclusion": "success",
"workflow_id": 75286667,
하나의 Repo에 대한 자료라면 수작업으로 충분히 가능하겠지만, 특정 User 또는 Organization에 대한 이력을 모두 출력하기 위해서는 별도의 개발이 필요하다. 그래서 개발하게 되었다.
본 개발 Github 주소 : https://github.com/armyost/billingArc
RestAPI 를 반복적으로 호출하면서 특정 계정/조직 내 모든 Repo의 Actions History를 수집하는 모듈이다.
for repo in listRepos:
elapsedTimePerRepo = 0
actionsUrl = baseUrl+repo+'/actions/runs'
위 JSON 응답에서 created_at과 updated_at의 차분이 해당 Workflow가 돌아간 전체시간이다. 이는 Github에서 과금할때 사용하는 Back Data와도 일치함을 확인하였다.
for workflowData in actions['workflow_runs']:
workflowCreateTime = datetime.strptime(workflowData['created_at'], '%Y-%m-%dT%H:%M:%SZ')
workflowUpdateTime = datetime.strptime(workflowData['updated_at'], '%Y-%m-%dT%H:%M:%SZ')
if workflowCreateTime >= beforeOneWeekGMT:
elapsedTime = workflowUpdateTime - workflowCreateTime
Github의 과금방식에서 사용하는 메커니즘에 맞추기 위해 각 Workflow History에서 초단위 절상을 하였다.
int(elapsedTime.total_seconds()/60)+1
다만, 이 모듈로 수집한 데이터와 실제 Github의 과금결과는 다소 차이가 발생할 수 있는데, 한 Workflow가 여러 Job을 병렬수행하는 경우 때문에 그렇다. 이 Python 모듈은 해당 Workflow의 시작과 끝의 차분으로 Computing 시간을 측정하는데, 간혹 Jobs을 병렬수행하도록 구성된 Workflow는 Computing 또한 병렬발생한 것이므로 병렬처리하는 모든 Computing 시간을 취합해야 한다. 하지만 이 부분 까지 확인할 수 있는 API 데이터를 찾지를 못하였다.
'PaaS > CI CD' 카테고리의 다른 글
DockerHub Rate Limit 정책 그리고 이슈 (0) | 2024.08.03 |
---|---|
Gitlab-CI) AWS CLI 사용을 위한 인증 방법 (0) | 2024.03.11 |
Github Actions) Workflow 자동실행 조건에 Tag와 Branch 모두 걸기 (0) | 2024.02.20 |
Github Actions) 성능제고를 위한 방안 cache (0) | 2024.02.20 |
Github Actions) AutoScaling Runner Controller 아키텍처 설명 (0) | 2024.01.28 |