2015-06-12 13 views
7

To jest mój .travis.yml:Jak mogę wyczyścić S3 wiadra przed travis wdrożyć

deploy: 
    provider: s3 
    access_key_id: $AWS_ACCESS_KEY 
    secret_access_key: $AWS_SECRET_KEY 
    bucket: domain.com 
    skip_cleanup: true 
    acl: public_read 
    region: ap-northeast-1 
    endpoint: domain.com.s3-website-ap-northeast-1.amazonaws.com 
    detect_encoding: true 
    on: 
    branch: master 

Ale to jest tylko przesłać pliki do wiadra, nie sync. Jak mogę zsynchronizować lub wyczyścić pliki wiaderek S3?

Dzięki.

=== UPDATE 25.05.2016 ===

OK, znalazłem rozwiązanie, wystarczy użyć aws-cli „s sync i --delete:

aws s3 sync YOUR_FILES s3://YOUR_S3_BUCKET/ --delete 

To wszystko :-)

+1

Tak, jestem zainteresowany w tym. Jakieś postępy od czerwca 2015 r.? : D –

Odpowiedz

2

Aby rozwiązać ten problem, zainstalowałem cli AWS z pip i wykonałem skrypt przed uruchomieniem.

To jest to, czego potrzebujesz w swoim .travis.yml:

before_install: 
    - pip install --user awscli 
    - export PATH=$PATH:$HOME/.local/bin 
before_deploy: bin/deploy.sh 

Należy również zabezpieczyć dwie zmienne środowiskowe wewnątrz .travis.yml który jest gotowy przez AWS-CLI:

travis encrypt AWS_ACCESS_KEY_ID=YOUR_KEY_HERE --add 
travis encrypt AWS_SECRET_ACCESS_KEY=YOUR_SECRET_HERE --add 

Twój bin/deploy.sh powinien wyglądać jak na poniższym

#!/bin/sh 

echo "Clearing bucket: s3://your-bucket/path/inside/bucket/if/you/want" 
aws s3 rm s3://your-bucket/path/inside/bucket/if/you/want --recursive --region eu-central-1 

że nie my określić region, który wydaje się obowiązkowy dla tego miejsca.

Mam nadzieję, że to pomoże!

+0

Uważaj na powyższy skrypt, jeśli masz jednocześnie uruchomionych wiele celów wdrażania, zostanie to uruchomione jeden raz na każdym etapie wdrożenia. – hussfelt

+0

Aby tego uniknąć, można było przenieść dyrektywę, aby uruchomić skrypt wdrażania do '' 'after_success:" bin/deploy.sh "' '' – hussfelt

3

Aktualizacja pomogła mi znaleźć rozwiązanie. Dzięki! Jest czystszy niż odpowiedź zaproponowana przez hussfelt.

Korzystanie awscli

Ponieważ używając polecenia notowanej wymagane rozeznanie wytłumaczę jak musiałem zmienić mój .travis.yml dla wszelkich innych, którzy ten post.

before_deploy: pip install --user awscli 

Najpierw zainstaluj awscli, aby włączyć synchronizację z zasobnikiem S3. Aby działać w architekturze opartej na kontenerach Travis, nie możemy użyć sudo, więc zainstaluj go w katalogu domowym pod numerem --user. W systemie Linux, który jest domyślnym OS na Travisa, binarne zainstalowane opcja ta znajduje się w ~/.local/bin/ -

deploy: 
    provider: script 

Następnie użyj dostawcy script uruchomienia polecenia niestandardowego jako metodę rozmieszczania.

script: ~/.local/bin/aws s3 sync dist s3://example.com --region=eu-central-1 --delete 

Ta linia jest po przesłaniu plików. Numer aws s3 sync jest używany do synchronizowania plików między lokalnym komputerem a zasobnikami. Pełna dokumentacja jest dostępna pod numerem here.

W moim przykładzie dist to folder kompilacji, który chcemy przesłać do S3. Twój system kompilujący może nazwać go build lub coś innego. "example.com" to nazwa twojego wiadra. Argument regionalny jest wymagany, aby jednoznacznie zidentyfikować twoje wiadro.

Bardzo interesującym bitem w tym poleceniu jest przełącznik --delete, który jest rozwiązaniem naszego problemu. Po ustawieniu, aws usunie wszystkie pliki znalezione w twoim segmencie, ale nie w twoim katalogu budowania.

skip_cleanup: true 
    on: 
    branch: master 

skip_cleanup należy ustawić lub żaden z plików nie zostanie przesłany. Osobiście lubię, gdy Travis wdraża tylko zatwierdzenia do master, ale każda konfiguracja jest możliwa tutaj. Aby uzyskać więcej informacji, patrz the docs.

Środowisko

Musimy dać aws nasze poświadczeń AWS do zatwierdzania wszelkich interakcji. Zmienne środowiskowe używane przez aws to AWS_ACCESS_KEY_ID i AWS_SECRET_ACCESS_KEY. hussfelt pisze, jak zapewnić je w odpowiedzi. Proces ten jest również opisany w dokumentacji Travis: encryption i AWS specifics.

Pełne rozwiązanie

# Deploy using awscli to enable pruning of removed files 
before_deploy: pip install --user awscli 
deploy: 
    provider: script 
    script: ~/.local/bin/aws s3 sync dist s3://example.com --region=eu-central-1 --delete  
    skip_cleanup: true 
    on: 
    branch: master 
+0

Wystąpił problem ze znalezieniem przez Travis awscli, więc zamiast 'before_deploy: pip install --user awscli' Zrobiłem 'install: pip install awscli', a następnie' script: aws s3 syn dist ..... 'i działało dobrze –

Powiązane problemy