GiitHub Actions+merged-pr-stat+datadog을 이용한 시각적 개발 생산성

개시하다


GW에서 성과를 내고 싶어서 평소 생각하던'개발의 생산성'을 가시화해 봤습니다.‼️
어쨌든 우아함에 신경 쓰지 말고 필요한 정보만 얻으면 돼!그런 생각으로 한 거니까 탓하지 마세요.

만든 물건


GiitHubActions입니다. 제작된 merged-pr-stat 에서 요청할 수 있는 해석 정보를 Datadog에 등급별로 전송합니다.merged-pr-stat에 대한 자세한 내용은 아래 블로그를 참조하십시오.
https://blog.shibayu36.org/entry/2020/08/24/173000
https://github.com/shibayu36/merged-pr-stat
github.merged_pr_stat을 접두사로 설정하여 데이터dog의 등급 연결 참조로 허용합니다.
항목
컨텐트
데이터dog 메트릭
count
병합된 PullRequest 수
github.merged_pr_stat.count
authorCount
PullRequests 작성자 수
github.merged_pr_stat
additionsAverage
행 평균 추가
github.merged_pr_stat.additionsAverage
additionsMedian
행의 중간값 증가
github.merged_pr_stat.additionsMedian
deletesAverage
행 평균 삭제
github.merged_pr_stat.deletesAverage
deletesMedian
행의 중간값 삭제
github.merged_pr_stat.deletesMedian
LeadTimeSecondsAverage
첫 번째 제출 날짜와 PullRequest 병합 날짜 사이의 평균 초
github.merged_pr_stat.LeadTimeSecondsAverage
LeadTimeSecondsMedian
첫 번째 제출 날짜와 PullRequest 병합 날짜 사이의 초 중간값
github.merged_pr_stat.LeadTimeSecondsMedian
timeToMergeSecondsAverage
작성된 PullRequest와 결합된 PullRequest 사이의 평균 초
github.merged_pr_stat.timeToMergeSecondsAverage
timeToMergeSecondsMedian
생성된 PullRequest와 병합된 PullRequest 사이의 초간 값
github.merged_pr_stat.timeToMergeSecondsMedian

GitHub Actions


실제 제작의 작업 절차는 다음과 같다.
name: Merged PullRequest statistics DataDog metric

on:
  schedule:
    - cron: '0 0 * * MON'
  workflow_dispatch:

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - name: Set up Python 3.9
      uses: actions/setup-python@v2
      with:
        python-version: 3.9
        
    - name: Install datadog
      run: |
        python -m pip install --upgrade pip
        pip install datadog

    - name: Set Up Node.js
      uses: actions/setup-node@v1
      with:
        node-version: 14
        
    - name: Install merged-pr-stat
      run: |
        npm install -g shibayu36/merged-pr-stat

    - name: Check version
      run: |
        dog -v
        merged-pr-stat -V

    - name: Post merged_pr_stat datadog metrics
      env:
        TZ: 'Asia/Tokyo'
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        DATADOG_API_KEY: ${{ secrets.DATADOG_API_KEY }}
        DATADOG_APP_KEY: ${{ secrets.DATADOG_APP_KEY }}
      run: |
        start_time=$(date -d '-7 day' '+%Y-%m-%dT00:00:00')
        end_time=$(date -d '-1 day' '+%Y-%m-%dT23:59:59')
        json=$(merged-pr-stat --start=$start_time --end=$end_time --query="repo:$GITHUB_REPOSITORY base:main")
        echo $json | jq -rc 'to_entries[] |[.key, .value] | @tsv' | xargs -n2 bash -c 'dog metric post github.merged_pr_stat.$0 $1 --tags "repository:$GITHUB_REPOSITORY"'
다음은 설정 내용을 간단하게 설명한다.

명령을 집행하다


start_time=$(date -d '-7 day' '+%Y-%m-%dT00:00:00')
end_time=$(date -d '-1 day' '+%Y-%m-%dT23:59:59')
json=$(merged-pr-stat --start=$start_time --end=$end_time --query="repo:$GITHUB_REPOSITORY base:main")

통계적 범위의 주기를 동적으로 설정합니다.


이번에 구상한 것은 주간 집계 취득이기 때문에merged-pr-stat는 7일 전 0시start_time에 전날 23시 59분을 설정했다.
예제)
실행 시간: 05/03(월) 09:00
총 범위: 04/26(월)00:00~05/02(일)23:59
JST에서 시간을 얻으려면 TZ 변수를 설정합니다.
      env:
        TZ: 'Asia/Tokyo'
또 일정 수행 시간도 월요일 9시로 설정했다.
on:
  schedule:
    - cron: '0 0 * * MON'

GITHUB_TOKIO 구성

end_time 명령을 실행하려면 방문 영패를 받아야 합니다.
하지만 GiitHub Actions를 사용하면 비밀이 자동으로 생성됩니다.
https://docs.github.com/ja/actions/reference/authentication-in-a-workflow
따라서 단독 방문 영패를 발표하지 않고 기밀 값을 변수 값으로 설정하여 방문 영패를 설정할 수 있다.
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

query 설정


조회에서 합계 대상의 창고와 모집 조건을 지정하여main 지점의 승진 요청으로 삼았다.
query="repo:$GITHUB_REPOSITORY base:main"
창고에 대해 환경 변수를 통해 이 Actions가 실행하는 창고 이름을 가져와 설정합니다.
https://docs.github.com/ja/actions/reference/environment-variables

데이터dog에 도량 보내기


echo $json | jq -rc 'to_entries[] |[.key, .value] | @tsv' | xargs -n2 bash -c 'dog metric post github.merged_pr_stat.$0 $1 --tags "repository:$GITHUB_REPOSITORY"'
Dogshell 명령을 사용하여 데이터 Dog에 메트릭을 보냅니다.
https://docs.datadoghq.com/ja/developers/guide/dogshell-quickly-use-datadog-s-api-from-terminal-shell/

데이터 dogAPI 키 설정


데이터 dog에 연결된 API 키는 비밀 변수로 창고로 설정되어 안전하게 설정할 수 있습니다.
      env:
        DATADOG_API_KEY: ${{ secrets.DATADOG_API_KEY }}
        DATADOG_APP_KEY: ${{ secrets.DATADOG_APP_KEY }}
https://docs.github.com/ja/actions/reference/encrypted-secrets

전송 메트릭


dog metric post github.merged_pr_stat.$0 $1 --tags "repository:$GITHUB_REPOSITORY"
여러 창고에서 도량을 보낼 때 데이터dog로 창고 단위로 필터할 수 있도록 창고 이름을 라벨로 설정합니다.
대시보드를 제작할 때 태그를 지정하여 모든 창고의 합계를 확인할 수 있습니다.

총결산


이번에는 일단 데이터를 도량의 수집 방법으로 넣었다.
Action을 이용하면 GITHUB.토키오가 필요 없는 발매가 편리하고 스케줄을 진행하면 데이터를 계속 수집할 수 있어 편리합니다!
이렇게 하면 언제든지 Datadog에서 시각화할 수 있습니다. 생산적인 시각화로서 어떤 계기판을 만들어서 개발자에게 전개해야 할지 생각합니다!

좋은 웹페이지 즐겨찾기