AWS CodeBuild에서 yarn을 사용할 수 있음

7736 단어 YARNCodeBuildAWS

하고 싶은 일



다음 두 가지를 알고 싶었다.
  • AWS CodeBuild에서 yarn을 사용하여 패키지를 설치할 수 있습니까?
  • npm을 사용한 경우와 yarn을 사용한 경우에 얼마나 시간에 차이가 있는가?

  • 로컬 개발에 yarn을 사용하고 있기 때문에 CodeBuild에서도 yarn을 사용하고 싶었습니다.

    결론


  • yarn은 사용할 수 있다(조건 있음)
  • yarn을 사용하면 조금 빠릅니다

  • 측정한 시간은 다음과 같습니다.

    패키지 설치를 한 번만 실행한 경우



    BuildProject 전체
    BUILD Phase
    yarn의 install
    install


    yarn
    2min21sec
    1min03sec
    14초
    40초

    npm
    2min22sec
    1min04sec
    -
    50초


    패키지 설치를 세 번 실행한 경우



    BuildProject 전체
    BUILD Phase
    yarn의 install
    install 1
    install 2
    install 3


    yarn
    3min12sec
    1min52sec
    15초
    47sec
    22sec
    15초

    npm
    3min19sec
    2min12sec
    -
    47sec
    39sec
    40초


    yarn은 사용할 수 있다(조건 있음)

    공식에 따르면 npm install -g yarn는 추천 할 수 없다는 것입니다.

    Note: Installation via npm is generally not recommended. npm is non-deterministic, packages are not signed, and npm does not perform any integrity checks other than a basic SHA1 hash, which is a security risk when installing system.

    For these reasons, it is highly recommended that you install Yarn through the installation method best suited to your operating system.
    htps : // 또는 rn pkg. 코 m / ぁ g / 엥 / ㅇ cs / ㄱ s 탓 l / #

    공식 절차에 따라 apt-get에서 패키지를 설치하려고했지만,
    sudo apt-get update 에 이런 에러가 나거나
    E: The method driver /usr/lib/apt/methods/https could not be found.
    
    apt-transport-https 이런 오류가 발생하거나
    E: Unable to locate package apt-transport-https
    

    그래서 포기했습니다. . . .

    실험 방법



    이 리포지토리에서 clone 한 것을 사용합니다.

    디렉토리 구성은 다음과 같습니다.
    +---npm
    |   |   buildspec.yml
    |   |
    |   +---app1
    |   |       package.json
    |   |       yarn.lock
    |   |
    |   +---app2
    |   |       package.json
    |   |       yarn.lock
    |   |
    |   \---app3
    |           package.json
    |           yarn.lock
    |
    \---yarn
        |   buildspec.yml
        |
        +---app1
        |       package.json
        |       yarn.lock
        |
        +---app2
        |       package.json
        |       yarn.lock
        |
        \---app3
                package.json
                yarn.lock
    

    "npm"디렉토리와 "yarn"디렉토리에서 각각 zip 아카이브를 만들고,
    CodeBuild 프로젝트의 소스라고 가정합니다. 각 "appX"디렉토리의 내용은 모두 동일합니다.

    buildspec.yml 확인



    각각의 디렉토리 바로 아래(zip 아카이브의 루트가 됩니다)에 있는 buildspec.yml가 아래와 같이 되어 있어 CodeBuild상에서 실행되는 yarn과 npm을 구분하고 있습니다.

    yarn/buildspec.yml
    version: 0.1
    
    phases:
      install:
        commands:
          - echo Nothing to do in the install phase...
      pre_build:
        commands:
          - echo Nothing to do in the pre_build phase...
      build:
        commands:
          - echo Build started on `date`
          - npm -v
          - node -v
          - npm install -g yarn
          - yarn --version
          - cd app1 && yarn
          - cd app2 && yarn
          - cd app3 && yarn
      post_build:
        commands:
          - echo Build completed on `date`
    

    npm/buildspec.yml
    version: 0.1
    
    phases:
      install:
        commands:
          - echo Nothing to do in the install phase...
      pre_build:
        commands:
          - echo Nothing to do in the pre_build phase...
      build:
        commands:
          - echo Build started on `date`
          - npm -v
          - node -v
          - cd app1 && npm install
          - cd app2 && npm install
          - cd app3 && npm install
      post_build:
        commands:
          - echo Build completed on `date`
    

    zip 아카이브 만들기



    zip 내용이 다음과 같이 되도록 yarn.zip 및 npm.zip을 만듭니다.
    npm.zip
    |   buildspec.yml
    |
    \---app1
    |       package.json
    |       yarn.lock
    \---app1
    |       package.json
    |       yarn.lock
    \---app1
            package.json
            yarn.lock
    

    S3 버킷에 업로드



    만든 두 개의 zip을 모든 S3 버킷에 업로드합니다.



    새 버킷을 만들고 루트에 zip 파일을 넣었습니다.

    CodeBuild로 프로젝트 만들기



    다음 내용으로 CodeBuild 프로젝트를 만듭니다.



    이것은 npm.zip에서 실행되는 분입니다. 같은 내용으로 "S3 Object key"에 "yarn.zip"을 지정한 CodeBuild 프로젝트도 작성합니다.

    빌드 시작



    각 프로젝트를 시작합니다.



    상황은 Build history 페이지에서 확인할 수 있습니다.



    "Output: Logs"에서 CloudWatch Logs에 기록된 로그를 볼 수 있습니다.

    이번에는 CodeBuild 프로젝트의 설정에서 Artifact(아티팩트) 없음의 설정으로 했으므로, 실행이 완료해도 로그 이외는 아무것도 남지 않습니다.

    요약



    결론은 먼저 썼지만 yarn을 사용할 수있었습니다.

    yarn을 신규로 인스톨 하는 오버헤드가 얼마나 있을지도 신경이 쓰였지만,
    실은 그다지 걸리지 않고, 토탈에서는 yarn의 실행 속도의 메리트를 낼 수 있다고 생각합니다.

    그럼!

    좋은 웹페이지 즐겨찾기