【TravisCI 고속화】병렬 실행으로 실행 시간 단축

2450 단어 루비RailsTravisCI

소개



  • 【TravisCI 고속화】bundle install을 매회 달리지 않도록 캐쉬한다로 고속화 실현
  • 더 할 수 없을까 챌린지하면 더욱 고속화 할 수 있었으므로 소개

  • 효과


  • 병렬로 돌리는만큼 빨라진다.
  • 예를 들어, 단위 테스트 군과 수락 테스트 군을 나누어 병렬로 하는 등


  • 할 일



    쓰기


  • .travis.yml에 matrix 설명을 추가하기 만하면됩니다.
  • 공식 사이트 설명은 여기

  • .travis.yml의 예를 올립니다. 이건 전부입니다

  • .travis.yml
    ...
    env:
      matrix:
        - TEST_TARGET=spec
        - TEST_TARGET=cucumber
    script:
      - "bundle exec rake $TEST_TARGET"
    ...
    

    실행 결과



  • 이렇게 작성하면 다음과 같이 병렬로 빌드가 실행됩니다.
  • 다음 예제는 73.1과 73.2

  • 빌드 목록에서 보면 두 빌드의 총 시간이 적혀 있지만 실제로 걸린 시간은 빌드 시간이 긴 쪽
  • 빌드 목록에 나오는 시간

  • 분할한 빌드로 각각 다른 처리(before_script등)를 시키고 싶은 경우


  • .travis.yml에 작성된 프로세스가 빌드를 분할하여 한쪽에서는 필요하지만 다른 하나는 필요하지 않을 수도 있습니다
  • 그럴 때는 다음과 같이 script를 밖으로 내버리면 됩니다
  • 나중에 명령 두드리는 부분을 method화하는 것도 좋다


  • .travis.yml
    ...
    script:
      - 'ruby .travis/travis.rb'
    ...
    

    .travis/travis.rb
    ...
    commands = [
      'sudo cp -p /etc/localtime /etc/localtime.bak',
      'sudo rm /etc/localtime',
      'sudo ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime'
    ]
    if ENV['TEST_TARGET'].include?('cucumber')
      commnads.each do |command|
        system("#{command} > /dev/null 2>&1")
      end
    end
    ... 
    
  • $ TEST_TARGET이 cucumber 인 경우에만 시간대를 변경하는 예

  • ~단지의 선전~


  • 전국의 Seleniumer 필독
  • Seleniumer라고 합니다만, Selenium, SauceLabs, Travis, Jenkins에 관한 노하우 쓰고 있으므로 좋으면 참고로 해 주세요
  • 좋은 웹페이지 즐겨찾기