circleci API를 사용하여 별도의 저장소 빌드 실행
7230 단어 CircleCI
목적
어떤 때?
환경설정
A
작업을 실행하는 측의 저장소 B
를 작업이 실행되는 측의 리포지토리로 설정합니다.API Permissions에서 토큰 만들기
B
리포지토리 설정 API Permissions
-> Create Token
버튼에서 토큰을 지불지불 한 토큰을 A 리포지토리의 환경 변수에 등록합니다.
A
리포지토리 설정 Environment Variables
Add Variable
로 했습니다 B_REPO_TOKEN
에 하드코딩하지 않고 완료됩니다.job 설정
.circleci/config.yml
리포지토리의 A
를 작성합니다..circleci/config.yml
steps:
- checkout
- run:
name: install jq
command: |
# APIのレスポンスを解析するためにjqがあったほうがいいです
apk add --no-cache --update jq
- run:
command: |
base_path='https://circleci.com/api/v1.1/project/<ここに:vcs-type>/<ここは:username>/<ここに:project>'
target_branch='ここにBリポジトリのビルド対象になるブランチ名(大体はmasterが一般的でしょう)'
# Bリポジトリのビルドを実行
build_num=$(wget --header='Accept: application/json' --post-data='' \
"${base_path}/tree/${target_branch}?circle-token=${B_REPO_TOKEN}" -O - 2>/dev/null | jq -r -e '.build_num')
# 特定のjobのみを実行したい場合は build_parameters[CIRCLE_JOB] を指定します
# build_num=$(wget --header='Accept: application/json' --post-data='build_parameters[CIRCLE_JOB]=実行したいjob名' \
# "${base_path}/tree/${target_branch}?circle-token=${B_REPO_TOKEN}" -O - 2>/dev/null | jq -r -e '.build_num')
if [ "$build_num" = "" ]; then
exit 1
fi
# ビルド実行APIはリクエストするとすぐレスポンスが返ってくる非同期なものなのでビルドの状況をポーリングして完了するまで待機
# ループの数はお好みで
for i in `seq 1 10`; do
echo "[Try ${i}] Waiting for build: ${base_path}/${build_num}"
response=$(wget --header='Accept: application/json' "${base_path}/${build_num}?circle-token=${B_REPO_TOKEN}" -O - 2>/dev/null)
if [ "`echo "$response" | jq -r -e '.lifecycle'`" = "finished" ]; then
if [ "`echo "$response" | jq -r -e '.status'`" = "success" ]; then
# ビルドが正常完了したので次のstepに進ませます
exit 0
fi
break
fi
if [ $i -eq 1 ]; then
# ある程度ビルドに時間がかかるようであれば1回目の待機は長い秒数にしておくとAPIの問い合わせ回数が減らせてよいでしょう
sleep 120
else
sleep 15
fi
done
# 終了ステータスを1以外にすることで次のstepに進ませないようにします
exit 1
- run:
name: after B repo build
command: |
echo 'Bリポジトリのビルドが正常に完了したのでそのあとに何かやりたい処理...'
요약
빌드의 실행으로부터 대기까지를 다른 쉘 파일에 잘라 공통화해 두면 보수성이 높아진다고 생각합니다.
API 경유로 빌드 실행을 유연하게 조작할 수 있으면 여러가지 시츄에이션으로 활용할 수 있을 것 같네요.
Reference
이 문제에 관하여(circleci API를 사용하여 별도의 저장소 빌드 실행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Yama-Tomo/items/b589b2b7f22b14bd99c6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)