GitHub에 Push하면 Google Cloud Build에서 CI가 움직여 Slack 통지하는 사람

소개



Google Cloud Build

Cloud Build에서 PHP 애플리케이션에서 phpunit을 실행하여 slack에 알리는 사람을 할 수 있습니다.

참고



GCP 공식 문서
  • GitHub에서 빌드 실행
  • 타사 서비스 알림 구성

  • 준비


  • Google 계정 (필요한 GCP 무료 평가판)

  • Cloud SDK 을 설치하고 gcloud 명령을 사용할 수 있도록
  • 대상 PHP 응용 프로그램의 GitHub 저장소

  • 이번에는 다음 리포지토리를 샘플로 사용합니다.

    절차



    1. GCP 프로젝트 생성









    완성

    2. Cloud Build API 활성화







    사용



    활성화됨

    3. GitHub 측에서 Cloud Build App 설정



    GitHub marketplace에서 Google Cloud Build application 사용

    대상 리포지토리는 나중에 변경할 수 있지만 우선 Only select repositories로 유지하는 것이 좋습니다.



    이 설정이 완료되면 일단 Pull Request 생성 시 Cloud Build가 움직이는 상태가 됩니다.

    4. cloudbuild.yaml 만들기



    Cloud Build는 Dockerfile 또는 cloudbuild.yaml 파일을 기반으로 빌드를 실행하지만 Dockerfile을 사용하는 절차는 문서에 나와 있으므로 여기에서는 cloudbuild.yaml 파일을 사용해 보겠습니다.

    Cloud Build에서 원하는 작업은 다음과 같습니다.
  • 소스 코드를 clone
  • composer install
  • phpunit 실행

  • 추가 할 cloudbuild.yaml의 내용은 다음과 같습니다.
    steps:
    - name: 'gcr.io/cloud-builders/git'
      args: ['clone', 'https://github.com/halnique/cloud-build-sample']
      id: git clone
    - name: 'gcr.io/${PROJECT_ID}/composer'
      args: ['install', '--no-interaction', '--no-suggest']
      id: composer install
    - name: 'gcr.io/${PROJECT_ID}/composer'
      args: ['test']
      id: phpunit
    timeout: 500s
    

    ※ composer.json에 phpunit 실행을 test 명령으로 scripts에 추가하고 있습니다.
    gcr.io/${PROJECT_ID}/composer라는 이미지는 Cloud Builders 커뮤니티에서 제공되는 것이므로 직접 이미지 빌드하고 프로젝트의 Container Registry에 등록해야합니다.
    gcr.io/cloud-builders/git 쪽은 공식 제공이므로 그대로 이용 가능합니다

    5. Container Registry에 이미지 등록



    커뮤니티 GitHub 리포지토리의 README를 참고로 합니다
    git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
    cd cloud-builders-community/composer
    PROJECT_ID=xxxxxxxx
    gcloud --project ${PROJECT_ID} builds submit --config cloudbuild.yaml .
    

    ※ PROJECT_ID는 자신의 것으로 변경하세요.

    끝나면 Conteiner Registry에 액세스해 봅니다.



    등록된 것 같습니다.

    이 상태에서 Cloud Build가 통과해야하므로 이전 cloudbuild.yaml을 포함한 상태에서 한 번 적절한 Pull Request를 만들어 보겠습니다.





    움직인 것 같습니다.

    6. Slack 앱 만들기



    Slack App의 제공은 현재 없는 것 같으므로, 스스로 작성합니다



    적절하게 만들고 Incoming Webhook을 활성화합니다.



    Add New Webhook to Workspace에서 Cloud Build가 알리는 채널을 선택합니다.



    이제 Webhook용 URL을 얻을 수 있습니다.

    7. Webhook을 두드리는 Cloud Functions 만들기



    Cloud Build를 트리거에 실행하는 Cloud Functions을 만들고 그 안에서 Slack의 Webhook을 두드리는 흐름입니다.

    ※ AWS 자세한 사람은 Lambda 같은 이미지

    Cloud Functions에 배포하는 것은 리포지토리
    git clone https://github.com/halnique/cloud-function-slack-sample.git
    cd cloud-function-slack-sample
    
    PROJECT_ID=xxxxxxxx
    SLACK_WEBHOOK_URL=yyyyyyyy
    
    gcloud --project ${PROJECT_ID} functions deploy subscribeSlack --trigger-topic cloud-builds --runtime nodejs10 --set-env-vars "SLACK_WEBHOOK_URL=${SLACK_WEBHOOK_URL}"
    

    PROJECT_ID와 SLACK_WEBHOOK_URL을 잘 변경하고 실행하십시오.



    완료되면 Cloud Functions에서 확인하면 어떻게 되나요?

    이것으로 완성

    Pull Request를 작성해 보겠습니다.





    할 수 있었다

    요약



    기본적으로 공식 문서를 보면서 할 수 있지만 생각했던 것보다 쉬웠습니다.

    기사에 올린 GCP 프로젝트는 삭제되었지만 GitHub 리포지토리는 공개하고 있으므로 참고해 주셔서 괜찮습니다.

    좋은 웹페이지 즐겨찾기