Cloud Build를 GitHub와 연동시켜 빌드 결과를 Slack으로 알립니다.

Cloud Build가 GitHub와 연동할 수 있게 되었기 때문에, 셋업으로부터 Slack 통지까지의 구축을 시험해 보았다.
Cloud Functions의 소스는 GitHub에도 있습니다.

전제 조건


  • gcloud가 설치되었습니다

  • Cloud Build의 GitHub 앱 설치



    다음 URL로 이동하여 Cloud Build의 GitHub 앱을 자신의 GitHub 계정에 설치합니다.
    htps : // 기주 b. 코 m / 아 ps / 오오 g ぇ- c ぉ d-bui ld
    설치하면 리포지토리 선택 화면으로 이동하므로 원하는 리포지토리 또는 모든 리포지토리를 선택합니다.
    이제 선택한 리포지토리를 푸시하면 자동으로 Cloud Build가 움직이게 된다.

    대상 리포지토리를 나중에 변경하려면 다음 URL에서 Google Cloud Build를 선택하고 Repository access -> Save를 클릭하십시오.
    htps : // 기주 b. 코 m/세친 gs/인 s 타치온 s/

    슬랙 알림을 위한 클라우드 기능 만들기



    새 디렉토리를 만들고 그 안에 다음 파일을 만듭니다.

    package.json
    {
        "name": "cloud-build-notification",
        "version": "0.0.1",
        "description": "Slack integration for Google Cloud Build, using Google Cloud Functions",
        "main": "index.js",
        "dependencies": {
            "@slack/client": "3.9.0"
        }
    }
    

    index.js
    const IncomingWebhook = require('@slack/client').IncomingWebhook;
    const webhook = new IncomingWebhook(process.env.SLACK_WEBHOOK_URL);
    
    // subscribe is the main function called by Cloud Functions.
    module.exports.subscribe = (event, callback) => {
        const build = eventToBuild(event.data);
    
        // Skip if the current status is not in the status list.
        // Add additional statues to list if you'd like:
        // QUEUED, WORKING, SUCCESS, FAILURE,
        // INTERNAL_ERROR, TIMEOUT, CANCELLED
        const status = ['SUCCESS', 'FAILURE', 'INTERNAL_ERROR', 'TIMEOUT'];
        if (status.indexOf(build.status) === -1) {
            return callback();
        }
    
        // Send message to Slack.
        const message = createSlackMessage(build);
        webhook.send(message, callback);
    };
    
    // eventToBuild transforms pubsub event message to a build object.
    const eventToBuild = (data) => {
        return JSON.parse(new Buffer(data, 'base64').toString());
    }
    
    // createSlackMessage creates a message from a build object.
    const createSlackMessage = (build) => {
        let message = {
            text: `Build \`${build.id}\``,
            mrkdwn: true,
            attachments: [
                {
                    title: 'Build logs',
                    title_link: build.logUrl,
                    fields: [{
                        title: 'Status',
                        value: build.status
                    }, {
                        title: 'Branch',
                        value: build.substitutions.BRANCH_NAME
                    }, {
                        title: 'Repository',
                        value: build.substitutions.REPO_NAME
                    }]
                }
            ]
        };
        return message
    }
    

    참고:
    h tps : // c ぉ d. 오, ぇ. 이 m / c ぉ d-bui ld / ㅇ cs / 곤후 ぃ ぐれ ぃ rd ぱ rty - 치후 ぃ 카치 온 s? hl = 그럼

    만든 Cloud Function 배포



    배포하기 전에 Cloud Function용 Cloud Storage를 만들어야 합니다.
    버킷 이름은 전세계에서 독특해야 하므로 조심한다.
    Slack의 Webhook URL은 코코에서 새로운 앱을 만든 다음 Incoming Webhooks에서 생성 할 수 있습니다.
    # ストレージバケットを作成する
    BUCKET='<your storage bucket name>'
    gsutil mb gs://$BUCKET
    
    # Cloud Functionをデプロイする
    SLACK_WEBHOOK_URL='<your webhook url>'
    gcloud functions deploy cloud-build-notification-slack \
        --stage-bucket $BUCKET \
        --entry-point subscribe \
        --trigger-topic cloud-builds \
        --runtime nodejs8 \
        --set-env-vars SLACK_WEBHOOK_URL=$SLACK_WEBHOOK_URL
    

    리포지토리를 푸시하여 동작을 확인해 봅니다.



    Cloud Build는 cloudbuild.yaml를 빌드 구성 파일로 쓸 수도 있으며, cloudbuild.yaml .

    이번에는 우선 심플하게 Dockerfile로 CI를 움직여 본다.

    GitHub 앱에서 설정한 좋아하는 리포지토리에 Dockerfile를 쓰고 푸시한다.
    FROM alpine:3.9
    RUN echo 'Hello world.'
    

    잘 가면 CI가 움직여 Docker 이미지가 Container Registry에 저장되고 Slack에 빌드 결과 알림이 온다. 덧붙여서, Container Registry에 보존되는 이미지명은 gcr.io/<プロジェクトID>/<リポジトリ名> 가 된다.


    할 수 있었다! !



    Cloud Console에서 GUI로 확인도 가능하지만 CLI로 확인하고 싶을 때.

    Cloud Build의 빌드 목록을 가져옵니다.
    gcloud builds list
    

    Container Registry에 있는 이미지 목록을 가져옵니다.
    gcloud container images list
    

    참고

    좋은 웹페이지 즐겨찾기