go modules 및 Circle CI 캐시를 사용하여 빌드 및 테스트 가속화

7891 단어 5CircleCICircleCI2.0
go modules의 기능과 Circle CI의 캐시를 잘 활용하여 빌드와 테스트를 가속화해 보겠습니다.

github는 여기 : htps : // 기주 b. 코 m / 어쨌든 / 시 rc ぇ

go modules



go modules에 대한 자세한 내용은:
  • htps : // 기주 b. 코 m / Go g / Go / Uuki / Mozue s
  • htps : // bg. 미안해. 오 rg / 모즈 2019

  • 있습니다. 복잡한 설명이라면 패키지를 관리하는 도구입니다. go.modgo.sum 의 2 개의 파일로 구성되어 있어 각각, modules 와, modules 의 샘이 쓰여져 있습니다. go modules를 이용해 두면, 어떤 환경에서도 같은 바이너리를 빼내는 것이 우리라고 생각합니다.

    올해 여름까지는 export GO111MODULE=on 로 환경 변수를 설정해 둡시다.

    go modules 캐시


    go mod download
    

    그러면 go.mod 등에 작성된 종속 패키지가 $GOPATH/pkg/mod/ 에 캐시됩니다. 이 디렉토리를 Circle CI save_cache에 지정하면 좋을 것 같습니다.

    예:
    version: 2
    
    defaults: &defaults
    
    jobs:
      setup-build:
        docker:
        - image: golang:stretch
        working_directory: /workspace
        environment:
          GOPATH: /
          GOCACHE: /.cache/go-build
          GO111MODULE: "on"
    
        steps:
        - run: go env
        - checkout
        - restore_cache:
            keys:
            - go-module-cache-v1-{{ checksum "/workspace/go.sum" }}
            - go-module-cache-v1-
        - run: go mod download
        - save_cache:
            key: go-module-cache-v1-{{ checksum "/workspace/go.sum" }}
            paths:
            - /pkg/mod/cache
        - save_cache:
            key: workspace-v1-{{ .Environment.CIRCLE_SHA1 }}
            paths:
            - /workspace
    

    go modules를 이용하고 있으므로, working_directory 를 좋아하는 곳에 할 수 있습니다.
    restore_cachego-module-cache-v1-{{ checksum "/workspace/go.sum" }}에서 go.sum 의 체크섬을 가지고 이미 캐시 된 것을 채택합니다.
    go-module-cache-v1-그래서 지금까지 캐시 한 것을 채용합니다.

    체크섬 캐시가 없으면 최신 캐시에서 당기므로 순서대로 쓰면 좋을 것 같습니다.

    go test 결과 캐싱



    Go의 테스트는 한 번 실행한 결과를 캐싱하는 기능이 있으므로 이를 캐싱해 보겠습니다.
      test:
        docker:
        - image: golang:stretch
        working_directory: /workspace
        environment:
          GOPATH: /
          GOCACHE: /.cache/go-build
          GO111MODULE: "on"
    
        steps:
        - restore_cache:
            keys:
            - workspace-v1-{{ .Environment.CIRCLE_SHA1 }}
        - restore_cache:
            keys:
            - go-module-cache-v1-{{ checksum "/workspace/go.sum" }}
            - go-module-cache-v1-
        - restore_cache:
            keys:
            - go-build-cache-v1-{{ .Branch }}-{{ .Revision }}
            - go-build-cache-v1-{{ .Branch }}
            - go-build-cache-v1
        - run: go test -v ./...
        - save_cache:
            key: go-build-cache-v1-{{ .Branch }}-{{ .Revision }}
            paths:
            - /.cache/go-build
    

    테스트를 실행하기 전에 setup-build 에서 캐시한 workspace와 go modules 캐시를 복원합니다.

    테스트 결과는 GOCACHE 로 지정한 장소에 있으므로, 그 디렉토리 마다 캐쉬 해 두는 것이 좋다.

    워크플로 만들기


    workflows:
      version: 2
      test:
        jobs:
        - setup-build
        - test:
            requires:
            - setup-build
    



    오시마

    완성품은 이쪽. .circleci/config.yml

    자료


  • htps : // 해 rc ぇ시. 코 m/도 cs/2.0
  • h tps : // / rc ぇ시. 이 m/두 cs/2.0/카친 g/
  • htps : // 해 rc ぇ시. 이 m/도 cs/2.0/을 rkfぉws/
  • 좋은 웹페이지 즐겨찾기