- ããã¯
- çµç·¯
- ç¹å®ã®ã¯ã¼ã¯ããã¼ã¸ã§ãã®å¦çãå¯è¦åãã試㿠v1 (èªåã®ã·ã§ã«ã¹ã¯ãªããã§ãã£ã¦ãã)
- ç¹å®ã®ã¯ã¼ã¯ããã¼ã¸ã§ãã®å¦çãå¯è¦åãã試㿠v2 (CircleCI Insights)
- ç¹å®ã®ã¯ã¼ã¯ããã¼ã¸ã§ãã®å¦çãå¯è¦åãã試㿠v3 (ããè¨ãã°ãDatadog ã§ã)
- ã¨ãããã¨ã§
ããã¯
YAMAP ã¨ã³ã¸ã㢠Advent Calendar 2021 ã®ç¬¬ 11 æ¥ç®ã¨ãCircleCI Advent Calendar 2021 ã®ç¬¬ 11 æ¥ç®ã®è¨äºã«ãªãäºå®ã§ãã
çµç·¯
YAMAP ã§ã¯ãCircleCI ã使ã£ã¦ CI/CD ãåãã¦ãã¾ãããæ¢åæ©è½ã®æ¹åããæ°æ©è½ã®ãªãªã¼ã¹ã«ä¼´ã£ã¦ããã¹ãããããã¤ã®æéãé·ããªã£ã¦ãã¦ãããç¶ç¶çã«å¦çæéã®æ¹åã模索ãã¦ãã¾ãã
æ¹åã«ããã£ã¦ãå¦çæéã®è¨æ¸¬æ¹æ³ã«ã¤ãã¦è©¦è¡é¯èª¤ãã¦ãã¾ããããæè¿ãCircleCI Insights ã®ããã·ã¥ãã¼ãã確èªããã¨ããããã©ã³ãã横æãã¦ãã¯ã¼ã¯ããã¼ã¸ã§ãã®å¦çæéã®å¯è¦åãããã¨ãåºæ¥ãããã«ãªã£ã¦ãã¾ããã
ä»åã¯ããã®ã¯ã¼ã¯ããã¼ã¸ã§ãã®å¦çæéã®å¯è¦åã«ã¤ãã¦ãããã¾ã§ YAMAP ã§ãã£ã¦ãããã¨ãå«ãã¦æ¸ãã¦ã¿ããã¨æãã¾ãã
ç¹å®ã®ã¯ã¼ã¯ããã¼ã¸ã§ãã®å¦çãå¯è¦åãã試㿠v1 (èªåã®ã·ã§ã«ã¹ã¯ãªããã§ãã£ã¦ãã)
.circleci/config.yml
以ä¸ã®ããã«ã.circleci/config.yml å
㧠Bash 㮠SECONDS
å¤æ°ãç¨ãã¦ãæç´ã«å¦çæéãåå¾ããããã«ä»è¾¼ãã ä¸ã§ãã·ã§ã«ã¹ã¯ãªããå
㧠API (ä¸è¨ã®ä¾ã§ã¯ãduration.sh
) ãå©ãã¦ãAWS ã® CloudWatch ã Datadog ã«ã¡ããªã¯ã¹ãæ¾ãè¾¼ãã§ãã¾ããã
version: 2.1 orbs: aws-cli: circleci/[email protected] ... executors: ... commands: ... build: executor: name: default steps: - run: name: Run Build command: | SECONDS=0 ... å®éã®å¦ç ... duration_seconds=$SECONDS bin/duration.sh dev build ${duration_seconds} ${CIRCLE_BRANCH} workflows: build: jobs: - build: filters: branches: ignore: - master - develop
ã¡ãªã¿ã«ãbuild.sh
ã®ä¸èº«ã¯ã以ä¸ã®ãããªæãã
#!/bin/bash environment=${1} workflow=${2} value=${3} branch=${4} now="$(date +%s)" function put_to_aws { aws cloudwatch \ put-metric-data \ --metric-name Duration \ --namespace "Custom/CircleCI/${workflow}" \ --value ${value} \ --dimensions Name=environment,Value=${environment} \ --timestamp=${now} } function put_to_datadog { curl -X POST "https://api.datadoghq.com/api/v1/series?api_key=${DD_CLIENT_API_KEY}" \ -H "Content-Type: application/json" \ -d @- << EOF { "series": [ { "metric": "circleci.${workflow}", "points": [ [ "${now}", "${value}" ] ], "tags": [ "${environment}", "branch:${branch}" ] } ] } EOF } put_to_aws & put_to_datadog & wait
CloudWatch ã¡ããªã¯ã¹ã¨ Datadog ã®ä¸¡æ¹ã«çµéæéãé£ã°ãã¦ããæ§åã§ãã
SECONDS å¤æ°ã使ã£ãå¦çæéã®è¨æ¸¬
ä¸è¨ã®ä¾ã§ã¯ãBash ã® SECONDS
å¤æ°ã使ã£ã¦ãå¦çæéãè¨æ¸¬ãã¦ãã¾ãããã®å¤æ°ã¯ãã·ã§ã«ãèµ·åããã¦ããã®ç§æ°ãæ ¼ç´ããã¾ãã
$ cat test.sh #!/bin/bash SECONDS=0 sleep 3 duration_seconds=$SECONDS echo $duration_seconds $ ./test.sh 3
Datadog ã§å¯è¦å
ããã¦ãå®éã« Datadog ã§å¯è¦åãããã®ã¯ãä¸å³ã®éãã§ãã
ãã ã
ä»æ´æ°ä»ãã¾ããããä¸è¨ã®ã¢ããã¼ãã ã¨ãå³å¯ãªã¯ã¼ã¯ããã¼ã¸ã§ãã®å¦çæéãè¨æ¸¬åºæ¥ã¦ãã¾ãããã¸ã§ãã®ä¸ã®ç¹å®ã®ã¹ãããã®å¦çæéãè¨æ¸¬ãã¦ããã ãã«ãªãã¾ããããå°ããã¡ããã¨ãããã¨ããã¨ã以ä¸ã®ããã«æ¸ãã¨è¯ãããã§ãã
--- version: 2.1 orbs: aws-cli: circleci/[email protected] jobs: build: docker: - image: cimg/base:2020.01 steps: - run: name: Job Start!! command: | echo "export START_TIME=$(date +%s)" >> $BASH_ENV - run: name: Sleep 5 command: | sleep 5 - aws-cli/install ... çç¥ ... - run: name: Job Stop!! command: | END_TIME=$(date +%s) DURATION_SECONDS=$((${END_TIME}-${START_TIME})) echo "START_TIME=${START_TIME}" echo "END_TIME=${END_TIME}" echo "DURATION_TIME=${DURATION_SECONDS}" bin/duration.sh dev build ${DURATION_SECONDS} ${CIRCLE_BRANCH}
ç¹å®ã®ã¯ã¼ã¯ããã¼ã¸ã§ãã®å¦çãå¯è¦åãã試㿠v2 (CircleCI Insights)
ãæ軽 CircleCI Insights
å·¦ã®ã¡ãã¥ã¼ãã¼ã« Insights æ©è½ãé®åº§ãã¦ãã¾ãããããã¡ãã¥ã¼ã®ä¸ã«åãé£ãã¦ãããããããæ軽ã«å©ç¨ãã¦æ¬²ããã¨ãã CircleCI ã®ãæ°æã¡ãæãã¾ãã
ãããã¯ãªãã¯ããã¨ã以ä¸ã®ããã«è¡¨ç¤ºããã¾ãã
ããã¸ã§ã¯ããã¯ãªãã¯ããã¨ã以ä¸ã®ããã«è¡¨ç¤ºããã¾ãã
ããã¦ãAll Workflows
ãã«ãã¦ã³ããã確èªããã Workflow
ã®ååãã¯ãªãã¯ããã¨ã以ä¸ã®ããã«è¡¨ç¤ºããã¾ãã
Y 軸ãæéã示ãã¦ãã¦ãå ¨ã¦ã®ãã©ã³ãã®ã¯ã¼ã¯ããã¼ã¸ã§ãå¦çæéã®æ¨ç§»ã確èªãããã¨ãåºæ¥ãæ£ã°ã©ãã表示ããã¾ããã
ã¾ãã«ãããã欲ããã£ã
以ä¸ã®ããã«ãåã¯ã¼ã¯ããã¼ã¸ã§ãã®å¦çæéããä½ã®ãããã®ã¯ã¬ã¸ãããæ¶è²»ãã¦ãããã表示ããã¾ããã¾ããæåã¨å¤±æã®ã«ã¤ãã¦ãã°ãªã¼ã³ã¨ã¬ããã§è¡¨ç¤ºããã¦ããä¸ç®çç¶ã§ãã
ãã ã
ä¸è¨ã®ã°ã©ãã¯ãææ°ã® 100 件ã®å¦çæéã®çµæãã表示ãããªãã®ã§ãç¶ç¶çã«å¦çæéã®æ¨ç§»ãã¢ãã¿ãªã³ã°ãããå ´åã«ã¯ãåé ã«æ¸ããããã«æç´ã«å¦çæéãè¨æ¸¬ããå¿
è¦ãããã¨æãã¾ãã(API ã§åå¾åºæ¥ãããããã¾ããããã¾ã ã試ãã¦ãã¾ãã)
å¾è¿°ã®ãDatadog ã® CircleCI Integration ãå©ç¨ãããã¨ã§ãç¶ç¶çã«å¦çæéã®æ¨ç§»ããæ軽ã«ã¢ãã¿ãªã³ã°ãããã¨ãå¯è½ã§ãã
ã¨ã¯è¨ãããããªæ©è½ãæä¾ãã¦ãã ãã£ã¦ Circle CI ãããæé£ããããã¾ãã
ç¹å®ã®ã¯ã¼ã¯ããã¼ã¸ã§ãã®å¦çãå¯è¦åãã試㿠v3 (ããè¨ãã°ãDatadog ã§ã)
CircleCI Integration
ããã¾ã§æ¸ãã¦ããã¦ãDatadog ã« CircleCI Integration ãå©ç¨ãããã¨ã§ãã¯ã¼ã¯ããã¼ã¸ã§ãã®æéãå¯è¦åãããã¨ãåºæ¥ããã¨ãæãåºãã¾ããã
ãããªé¢¨ã«ä»è¾¼ãã§
çµæãå¾ ã¡ããã¨æãã¾ãã
ããæããããªãã§ããï¼
ã¨ã¦ãããæãã§å¯è¦åããã¾ããã
Datadog ã®ã¯ã¨ãªãé§ä½¿ãã¦ãã¯ã¼ã¯ããã¼ã¸ã§ãæ¯ã®å¦çæéããããã¸ã§ã¯ãåä½çãè¯ãæãã§å¯è¦ååºæ¥ã¦ãã¾ãã
ã¨ãããã¨ã§
å¦çæéã®æ¹åã¯ä¸æ¥ãã¦æãããç¶ç¶çãªè¦³æ¸¬ãå¿ è¦ã¨ãªãã¾ãã