>

트라비스 CI osx 가 있습니다  Wyzwyz로 구축  소스에서 빌드해야하는 종속성.

나는 트래비스가 brew 를 가지고 있음을 알고  기능, 그러나 cache 를 캐시하는 방법에 대한 문서는 없습니다  빌드 또는 출력.

brew 를 캐시하는 방법에 대한 아이디어  트래비스 패키지?

brew

  • 답변 # 1

    여기에 느슨하게 관련된 3 가지 문제가 있습니다 :

    캐시 다운로드 병

    현지에서 만든 병을 캐치

    캐시 홈브류 메타 데이터

    세 가지가 모두 필요한 것은 아니므로 필요에 맞는 섹션을 따르십시오.

    <시간> 캐시 다운로드 병

    $HOME/Library/Caches/Homebrew 추가  Travis의 캐시(실제로이 경로는 brew --cache 를 사용하여 검색해야합니다)  하지만 여기서 전화 할 수는 없습니다.)

    cache:
      directories:
        - $HOME/Library/Caches/Homebrew
    
    

    brew cleanup 실행   before_cache 에서  stage-그렇지 않으면 새 패키지 버전이 출시됨에 따라 캐시가 무한대로 증가합니다

    before_cache:
      - brew cleanup
    
    

    현지에서 만든 병을 캐치

    전체 코드가 너무 길어서 여기에 나열하여 알고리즘을 제공 할 수 없습니다.

    이것은 이전 섹션에 추가 된 것입니다.사용하지 않는 경우설치시단계에서 Homebrew 캐시 외부의 어딘가에 로컬 병을 저장하고 아래의 캐시에 추가하십시오.시작시단계에서 적절한 이름

    설치 중 :

    brew deps 를 사용하여 패키지의 종속성 확인  재귀 적으로

    사용자 환경에 패키지 용 병을 사용할 수없는 경우 ( (bottled) 없음)  와이즈 비즈  출력), brew info <pkg> 로 빌드 종속성 포함

    각 패키지 및 종속성에 대해

    설치되어있는 경우 ( --include-build  성공) 및 최신 버전 ( brew list --versions <pkg> 에서 없음) ), 건너 뛰기

    이전 버전이있는 경우 다음 단계에서 이전 버전과 함께 새 버전을 설치해야합니다.

    brew outdated  예전 버전이 아닌 경우 ( brew unlink 없음)  와이즈 비즈  출력)

    [keg-only] 를 모두 호출 brew info 와 함께

    병이 있으면 바로 brew install  그것은

    병을 사용할 수없는 경우

    다음 순서로 빌드하고 설치하십시오 :

    --force
    
    

    (결과 병 및 JSON 파일의 이름을 얻는 공식적인 방법이없는 것 같습니다. brew install 에서 병 이름을 가져 왔습니다.  출력 및 JSON 파일에서 유추 된 JSON 파일 이름)

    병 공식을 패키지 공식에 추가

    brew install --build-bottle <pkg>
    brew bottle --json <pkg>
    brew uninstall --ignore-dependencies <pkg>
    brew install <bottle>
    
    

    병 파일을 brew bottle 에서 제공 한 적절한 이름으로 Travis 캐시에 저장하십시오.

    병 정보를 추가 한 후에 만이 작업을 수행하십시오. 그렇지 않으면 대신 소스 패키지의 경로를 얻게됩니다.

    (Homebrew는 또한 brew bottle --merge --write <json file> 에서 다운로드 한 파일에 대한 심볼릭 링크를 만듭니다. . 이 작업을 수행 할 필요는 없습니다.)

    나중에 사용하기 위해 JSON 파일을 저장하십시오. 위치를 Travis 캐시에 추가하십시오.

    시작시 :

    와이즈 비즈  당신이 가고 있다면

    저장된 .json 파일을 살펴 봅니다. 각각에 대해 로컬 병이 여전히 적합한 지 확인하십시오 (버전과 재 구축 번호를 비교하여 brew --cache <pkg> 의 출력을 구문 분석 할 수 있음)  그리고 $HOME/Library/Caches/Homebrew  이 데이터).

    캐시 된 병 및 .json을 삭제하십시오.

    brew update 로 병으로가는 길을 찾을 수 없으므로  이 시점에서 독립적으로 저장해야합니다. 이 글을 쓰는 시점에 Symlink는 Travis의 캐시에 저장되지 않으므로 경로를 보유한 일반 파일을 사용했습니다.

    그렇다면 병 정보를 위의 공식에 다시 추가하십시오

    버전과 충돌하지 않고 공식에서 다운로드 URL을 변경할 가능성은 거의 없습니다. 그러면 병의 예상 캐시 이름이 해시가 다운로드 URL의 해시이므로 변경 될 것입니다. 이것을 허용하려면 brew info --json=v1 <pkg> 인지 확인하십시오.  정보를 추가 한 후 여전히 병을 가리 킵니다.

    와이즈 비츠에서 :

    brew info --json=v1 <bottle> 를 사용하는 경우  이전 섹션에서 로컬로 작성된 병 파일을 캐시에서 어딘가에 저장 한 후 실행하십시오. brew --cache  이번에는 필요하지 않은 것들을 삭제할 수 있습니다. brew --cache <pkg> 후 삭제 한 파일을 복원하십시오.

    캐시 홈브류 메타 데이터

    (다시 말해서 전체 코드가 너무 길어서 알고리즘을 제공합니다.)
    before_cache 를 실행하면  ( brew cleanup 에 비밀 변수가 없는지 확인하십시오.  또는 Travis 프로젝트 설정- cleanup   cleanup 인 경우에만 많은 상태 메시지를 인쇄합니다  tty)입니다. Homebrew 자체 업데이트 작업을 정확히 구성하는 항목을 확인할 수 있습니다. 따라서 캐시해야하는 항목은 다음과 같습니다.

    풀기 (실제로 brew update --verbose ) 실제로 .travis.yml 인 몇 가지 경로에 '기본적으로'  리포지토리 :

    brew  -자가 맥주 자체

    stdout  -설치된 탭

    탭을 통과하고 사용하지 않는 비트를 캐시하고 마이그레이션합니다. Travis 캐시 컨텐츠는 기존 디렉토리 구조를 대체하지 않고 기존 디렉토리 구조에 추가하기 때문에 두 번째로 업데이트의 일부로 삭제되었지만 새 VM에 다시있는 파일로 인해 이상한 조치 및 오류가 발생할 수 있습니다. 내가 목격 한 사람들 :

    항상 rebase 마이그레이션을 시도합니다   git/usr/local/Homebrew 에서 사본 작성 . 캐시 된 경우이 사본은 다음 실행시 "오류 : 파일이 있습니다"를 발생시킵니다.

    언제나 많은 커밋되지 않은 파일을 /usr/local/Homebrew/Library/Taps/*/* 로 가져 오려고합니다.

    따라서 작업은 다음과 같습니다.

    Taps/caskroom/homebrew-cask 추가  트래비스 캐시로

    /usr/local/Cellar/usr/local/opt를 추가하는 것은 나쁜 생각으로 판명되었습니다. 먼저 너무 커서 너무 큰 시간이 소요됩니다. 캐시를 업로드하는 단계;둘째, 이것은 안전하지 않습니다 'cuz Taps/homebrew/homebrew-cask  스크립트는 시스템의 다른 임의의 부분에 영향을 줄 수 있으므로 결과를 캐시하지 않고 매번 (캐시 된) 병에서 새 패키지 버전을 설치해야합니다. 병을 설치하는 데는 몇 초 밖에 걸리지 않습니다.

    와이즈 비즈 이전 :Homebrew 코드베이스 정리

    Taps/homebrew/homebrew-cask/homebrew-cask 삭제   Taps/homebrew/homebrew-versions 경우 디렉토리  존재합니다

    모든 /usr/local/Homebrew 찾기   postinstall 에서 repos  (와이즈 와이즈) brew update 를 얻을  결과) 및 Taps/caskroom/homebrew-cask 를 실행하십시오.  각각 Travis의 남은 음식을 제거하기 위해

    Taps/homebrew/homebrew-cask 를 사용하여 남은 음식에서 Homebrew 캐시 정리  (이전 섹션과 함께 사용하는 경우 추가 작업은 여기를 참조하십시오)-그렇지 않으면 git 에서 많은 오류가 발생합니다  "캐시 항목 마이그레이션 ..."단계에서.

    와이즈 비츠에서 :

    /usr/local/Homebrew 사용  대신-병 정보와의 로컬 커밋과의 충돌 가능성을 자동으로 해결합니다.

    로컬 병을 다시 추가 할 때(이전 섹션과 함께 사용하는 경우) :

    병 정보가 이미있는 경우 병 정보를 공식에 다시 추가하지 마십시오

    패키지 버전이 변경되고 병 정보가 공식에 있으면 공식 및 find -type d -name .git 에서 제거하십시오.  결과. 그렇게 할 수있는 재고 방법이 없으므로 스크립트를 사용하여 수식 파일을 구문 분석하고 편집하고 해당 라인을 dirname 에서 삭제해야합니다  표. 공식 파일의 경로는 git clean -fxd 를 사용하여 검색됩니다. .

    설치시 :

    타사 탭을 사용하는 경우 항상 해당 탭이 이미 설치되어 있는지 확인하십시오 :

    brew cleanup
    
    

    symlink는 Travis 캐시에 저장되지 않으므로 핀이 기억되지 않을 수 있습니다. 하지만 그것들을 확인하는 것도 아프지 않을 것입니다 :

    brew update
    
    

    와이즈 비츠에서 :

    brew update 삭제  존재하는 경우

    brew update --merge

  • 이전 python - 큰 음모 - ~ 2 천만 개의 샘플, 기가 바이트의 데이터
  • 다음 jenkins pipeline - 하나의 단계 또는 단계가 실패한 경우 모든 단계 및 단계를 실행하십시오