Jak publikować artefakty w Travis CI?

Chciałbym użyć Travis CI do mojego projektu open-source. Kwestia, że Travis nie zapewnia żadnych sposobów na publikację wyprodukowanych artefaktów (choć mają to w swoich przyszłych planach).

Jakie są obejścia, aby opublikować / przesłać artefakty gdzieś? Mogę wykonywać dowolne Skrypty na maszynie CI.

Prosty upload zadziała, ale jest problem z bezpieczeństwem: każdy będzie mógł przesłać coś w taki sam sposób, jak wszystkie źródła są publiczne.

9 answers

Funkcja "github releases uploading" została niedawno ogłoszona. Oficjalnie wspiera wszystko, co jest potrzebne. Zobacz http://docs.travis-ci.com/user/deployment/releases/

 23
Author: minghua,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-07 19:22:46

GitHub zwalnia krok po kroku

Metoda została wymieniona w https://stackoverflow.com/a/24100779/895245 , i jest słabo udokumentowany na: https://docs.travis-ci.com/user/deployment/releases / , więc tutaj idzie bardziej szczegółowe krok po kroku.

Wysyła artefakty do wydań Githuba https://github.com/<username>/<repo>/releases, które istnieją dla każdego znacznika Git, który wypchniesz.

  1. Zdobądź osobisty Token dostępu pod https://github.com/settings/tokens

    Włącza tylko dostęp "public_repo"dla publicznych repozytoriów, "repo" dla prywatnych.

    Zapisz gdzieś żeton, ponieważ możesz go zobaczyć tylko raz.

  2. Zainstaluj travis gem:

    gem install travis
    # See: https://stackoverflow.com/a/33119804/895245
    gem update --system
    

    Następnie cd do twojego repozytorium i:

    travis encrypt <api-token>
    

    Ale ostatnio ludzie donoszą, że travis encrypt -r githubusername/repositoryname --org jest potrzebny, zobacz: https://github.com/travis-ci/travis-ci/issues/8128

    To będzie produkuje wyjście takie jak:

    secure: "<encrypted-token>"
    

    Zanotuj duży zaszyfrowany token.

  3. Użyj .travis.yml w następujący sposób:

    script:
      # This command generates a release.zip file.
      - make dist
    deploy:
      provider: releases
      api_key:
        secure: "<encrypted-token>"
      file: 'release.zip'
      skip_cleanup: true
      on:
        tags
    

    Dzieje się tak, że Travis zastępuje każde something: secure: <encrypted-string> tylko something: <decrypted-string>, Jak wyjaśniono na: http://docs.travis-ci.com/user/encryption-keys/

    Jest to bezpieczne, ponieważ tylko autoryzowane naciśnięcia przez Ciebie mogą odszyfrować ciąg znaków, więc jeśli złośliwy użytkownik spróbuje wykonać pull request, aby uzyskać ciąg, powinien po prostu pokazać zaszyfrowany sznurek.

    Teraz, gdy wciśniesz commit z tagiem, Travis prześle release.zip do wydania:

    git commit -m 1.0
    git tag -m 1.0 1.0
    git push --tags
    

    Jeśli już nacisnąłeś commit i znacznik po, być może będziesz musiał kliknąć przycisk "Restart build" w interfejsie użytkownika Travisa, aby go przesłać.

Https://stackoverflow.com/a/38037626/895245 ma kilka zrzutów ekranu z procesu.

Metoda alternatywna: zmienna środowiskowa

  1. Zamiast zaszyfrowany łańcuch, możemy również użyć ukrytej zmiennej środowiskowej.

    W Ustawieniach repozytorium https://travis-ci.org/<me>/<myrepo>/settings Utwórz zmienną środowiskową:

    GITHUB_API_KEY=<token>
    

    I zaznacz "Display value in build log "jako " Off" i użyj:

    api_key: '$GITHUB_API_KEY'
    

    Chociaż ta metoda nie będzie wyświetlana w logach dla żądań pull, ta metoda jest bardziej ryzykowna, jak możesz mój błąd listę środowiska kompilacji.

    Plusem jest to, że metoda ta jest prostsza do Rozumiem.

Prosty przykład mojego, który przesyła obrazy wygenerowane z Gnuplot do wydań Githuba:

Pytanie o wdrożenie stron na Githubie: jak publikować strony na Githubie od Travis CI?

 34
Author: Ciro Santilli 新疆改造中心 六四事件 法轮功,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-20 06:53:31

Jeśli twój projekt jest oparty na Githubie - prawdopodobnie z Travisem-to najprostszym sposobem jest sprawdzenie wygenerowanych artefaktów w gałęzi gh-pages. Zobacz więcej na Github .

Jak to zrobić zależy w dużej mierze od używanego systemu budowania. W maven możesz użyć maven-scm-plugin - Przykład znajdziesz tutaj .

EDIT: pełny Przykład znajdziesz tutaj: https://github.com/tonnymadsen/ui-bindings/blob/master/com.rcpcompany.updatesite/pom.xml

 8
Author: Tonny Madsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-02 12:57:01

Więc najpierw musisz się upewnić, że próbujesz wdrożyć artefakty wydania. Więc zrób tag jako pierwszy w Githubie. Aby zrobić to ręcznie:

Tutaj wpisz opis obrazka

Następnie w pliku .travis.yml dodaj następującą konfigurację. Dla użytkowników gradle

language: java
jdk:
  - oraclejdk7

sudo: required

before_install:
 - chmod +x gradlew

script:
  - ./gradlew clean build -i --continue

deploy:
  provider: releases
  api_key: ${api_key}
  file: "build/libs/Project.jar"
  skip_cleanup: true
  on:
    all_branches: true
    tags: true

Tutaj api_key wartością jest Travis Ci zmienna środowiskowa. Co wskazuje na Github api_key.

Plik jest artefaktem zbudowanym z tej konstrukcji. Do których chcemy zostać wdrożeni gitHub.

on:
    all_branches: true
    tags: true

Jest konfiguracją obowiązkową dla znaczników, które mają być wdrożone.

Nie musisz pobrać api_key z Githuba:

  1. przejdź do osobistych tokenów dostępu

Tutaj wpisz opis obrazka

  1. Wybierz wygeneruj nowy token

Tutaj wpisz opis obrazka

  1. wybierz odpowiednie zakresy dla api_key Tutaj wpisz opis obrazka
  2. skopiuj wygenerowany api_key Tutaj wpisz opis obrazka
  3. przejdź do Travis Ci i dodaj zmienną środowiskową. W tym celu wybierz Ustawienia Tutaj wpisz opis obrazka
    1. Wklej wygenerowany api_key Tutaj wpisz opis obrazka

Kiedy uruchomisz nową kompilację, Artefakt zostanie uruchomiony. Tutaj wpisz opis obrazka

 6
Author: Xelian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-26 10:37:45

Update : Github wyłącz teraz API pobierania, więc poniżej odpowiedź jest idea.

Moje rozwiązanie wykorzystuje "bezpieczne zmienne środowiskowe" dostarczone przez travis-ci i "Github repo Download API" z powiązanym skryptem

Każdy repo w Githubie ma strony pobierania, jest to również dobre miejsce do publikowania Twoich artefaktów i ma powiązane "repo Download API" http://developer.github.com/v3/repos/downloads/

W końcu, w .travis-ci.yml wygląda to tak jak poniżej

env:
  global:
    - secure:     "qkE5/TVKQV/+xBEW5M7ayWMMtFwhu44rQb9zh3n0LH4CkVb+b748lOuW3htc\nXfnXU8aGzOsQBeCJZQstfzsHFPkll+xfhk38cFqNQp7tpMo/AOZIkqd2AIUL\n0bgaFD+1kFAxKTu02m11xzkDNw6FuHMVvoMEQu/fo115i2YmWHo="  

after_script:
  - ./github-upload.rb sdcamp.zh.pdf larrycai/sdcamp --description "generated by travis-ci, $TRAVIS_JOB_ID" --force --name sdcamp.zh.snapshot.pdf --skip-ssl-verification -t $GITHUB_TOKEN
Zobacz mój szczegółowy blog: http://larrycaiyu.com/blog/2012/10/25/publish-the-artifacts-inside-travis-ci-to-github/
 5
Author: Larry Cai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:55:04

Zdaję sobie sprawę, że to starsze pytanie, ale chciałbym dodać inne rozwiązanie do mieszanki, które uważam za lepsze niż te omawiane do tej pory.

Użyj Bintray:

OP jest zainteresowany publikacją artefaktów od Travis-CI. Polecam korzystanie https://bintray.com/ Z organizacją , lub własnym kontem osobistym (oba działają ,ale w przypadku github org, może bardziej sensowne jest posiadanie organizacji to pasuje do niego, i opublikowane artefakty z tego github org przejdź do it ' s matching bintray org).

Powodem tego jest to, co oferuje bintray i wsparcie dla projektów open source. Polecam spojrzeć tutaj na ich przegląd: http://www.jfrog.com/bintray/

Można również link do JCenter, co sprawia, że to, co publikujesz, znacznie ułatwia innym korzystanie/pobieranie/używanie (przez maven, gradle, SBT itp.).

Dla Javy + Maven:

Po skonfigurowaniu bintray (utworzone konto lub org), możesz łatwo zintegrować go z Travisem. W przypadku kompilacji java & maven możesz użyć opcji zaszyfrowanych zmiennych travis-ci , aby zaszyfrować ${BINTRAY_USER} i ${BINTRAY_API_KEY}. Następnie możesz skonfigurować Maven deploy, aby wypychać Wydania do bintray. W pliku maven settings.xml będziesz odwoływał się do zmiennych środowiskowych zaszyfrowanych z Travisem jako user / pass, ie:

  <servers>
    <server>
      <id>my-bintray-id</id>
      <username>${env.BINTRAY_USER}</username>
      <password>${env.BINTRAY_API_KEY}</password>
    </server>
  </servers>

Następnie dodasz sekcję distributionManagement do projektu pom.xml, coś takiego:

<distributionManagement>
    <repository>
        <id>my-bintray-id</id>
        <url>https://api.bintray.com/maven/myUserName/myRepoName/my_awesome_project;publish=1</url>
    </repository>
</distributionManagement>

Następnie skonfigurujesz plik .travis.yml do "wykrywania", gdy pojawi się wydanie. Użyłem pierwszej połowy wtyczki maven release: mvn release:prepare (ignorując drugą połowę -- release: preform) z lokalnego dev box. Spowoduje to utworzenie znacznika, wybranie wersji w pom, itp. w Twoim imieniu. Co kończy się z tagiem Wersja (nie-SNAPSHOT) w github. This tagged commit makes its way downstream to travis, gdzie twoja .travis.yml skonfiguruje Travis do budowania i publikowania.

W Twoim .travis.yml skonfiguruj go do testowania na TRAVIS_TAG, TRAVIS_PULL_REQUEST, i wszelkie inne kontrole chcesz dokonać przed dzwoniąc mvn deploy. Zrobiłbyś to na after_success. W ten sposób travis buduje cały czas, ale działa tylko mvn deploy gdy jest to tag i spełnia inne warunki, które chcesz (jak na przykład, jdk8 build). Oto przykład .travis.yml:

language: java

jdk:
  - oraclejdk7
  - oraclejdk8

after_success:
  - mvn clean cobertura:cobertura coveralls:report javadoc:jar
  - test "${TRAVIS_PULL_REQUEST}" == "false" && test "${TRAVIS_TAG}" != "" && mvn deploy --settings travis-settings.xml

branches:
  only:
    - master
      # Build tags that match this regex in addition to building the master branch.
    - /^my_awesome_project-[0-9]+\.[0-9]+\.[0-9]+/

env:
  global:
    - secure: cfHTvABEszX79Dhj+u8/3EahMKKpAA2cqh7s3JACtVt5HMEXkkPbeAFlnywO+g4p2kVENcQGbZCiuz2FYBtN3KrIwFQabJE8FtpF57nswPRrmpRL+tWcYtipVC2Mnb4D7o6UR2PiC7g20/9EEWV7OeddXU3fzNBBW+LXkKAL20Ishg/jTDj+DIMFeVU8a6gd+6G2r8rf2jr2PMUeq1lO+eSkm3cjQLjRJN3CNY5GQToV/l1hef732y//6K9prP+H9vbkx+c7KF6W6OsQuXha9hy038J4ZXFWiNZdLUZLytrTcsOdbL2d8qEBv38ycs71kw0eHINMcPbNWYaxWHKeQRIievSPbTqOmm5BSh/keBRQe+aBzKrzw680QcRcnDMFePb1uu9VhpCabu0fBTer/7MENhR/QDoW8g4ydZNqXSWqiJBaYomENhjUF3v/4KzvX5P8bPlVBvgyAAcAzY8+MwLVeZKsJIUAHuS5v6kHSb0F17pvAb1XM+jet92PT/tRh75kVHtwtiPffhCd2/LzjmCLH31CC4WUZDG4OGw/8SbMiGX1Kww1Y9hSp09rQ9ytLaQa1kDa2Nv4syjJRVKWQf3/TS1VLqXBYVZXufY/XtyA0gDV0ZumwNo8ukT5Cnc7hC9oFkRvPkJxvNTzgDWkd6TVUDligxgLQHS/2fZpNo=
    - secure: cfHTvABEszX79Dhj+u8/3EahMKKpAA2cqh7s3JACtVt5HMEXkkPbeAFlnywO+g4p2kVENcQGbZCiuz2FYBtN3KrIwFQabJE8FtpF57nswPRrmpRL+tWcYtipVC2Mnb4D7o6UR2PiC7g20/9EEWV7OeddXU3fzNBBW+LXkKAL20Ishg/jTDj+DIMFeVU8a6gd+6G2r8rf2jr2PMUeq1lO+eSkm3cjQLjRJN3CNY5GQToV/l1hef732y//6K9prP+H9vbkx+c7KF6W6OsQuXha9hy038J4ZXFWiNZdLUZLytrTcsOdbL2d8qEBv38ycs71kw0eHINMcPbNWYaxWHKeQRIievSPbTqOmm5BSh/keBRQe+aBzKrzw680QcRcnDMFePb1uu9VhpCabu0fBTer/7MENhR/QDoW8g4ydZNqXSWqiJBaYomENhjUF3v/4KzvX5P8bPlVBvgyAAcAzY8+MwLVeZKsJIUAHuS5v6kHSb0F17pvAb1XM+jet92PT/tRh75kVHtwtiPffhCd2/LzjmCLH31CC4WUZDG4OGw/8SbMiGX1Kww1Y9hSp09rQ9ytLaQa1kDa2Nv4syjJRVKWQf3/TS1VLqXBYVZXufY/XtyA0gDV0ZumwNo8ukT5Cnc7hC9oFkRvPkJxvNTzgDWkd6TVUDligxgLQHS/2fZpNo=

(the secure ' s are just a made up na przykład, po zaszyfrowaniu użytkownika bintray i klucza bintray API z Travisem, zobaczysz coś podobnego w swoim yaml)

To daje pełny system do publikowania artefaktów "into the wild", gdzie każdy może następnie konsumować i używać. Używasz usługi zaprojektowanej od podstaw jako repozytorium artefaktów( bintray) i używasz Travis w inteligentny sposób, aby sprawdzić tagi, które produkuje Maven release:prepare. Wszyscy razem, to Ty decydujesz o wydaniu (mvn release:prepare z lokalnego dev boxu), a travis dostaje je do bintray.

Inne

Zauważ, że istnieje Travis-ci/DPL pull request w GitHubie, aby uzyskać ściślejszą integrację (dostawcy travis) między Travisem a bintray. To znacznie ułatwia travisowi wysyłanie artefaktów do bintray (releases ; bintray nie był przeznaczony do przechowywania migawek, zamiast tego użyjArtifactory ). Mimo że github ma niektóre wsparcie dla wydań, jak to pisanie, uważam bintray być lepsze w tej roli, i właściwe narzędzie do wykorzystania.

Powodzenia!
 4
Author: Jack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-03 04:28:32

Przygotowałem przykładowy projekt na https://github.com/vorburger/mvnDeployGitHubTravisCI ilustrujące, jak to zrobić (częściowo oparte na hostowaniu repozytorium Maven na GitHubie ). Jak wyjaśniono w linked answer, podstawową ideą jest przygotowanie lokalnego repozytorium za pomocą Maven-deploy-plugin ' s altDeploymentRepository, a następnie użycie github site-maven-plugin , aby wypchnąć swoje artefakty do Githuba. Połącz Travis z uwierzytelnianiem GitHub, jak wyjaśniono powyżej.

 2
Author: vorburger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:28

TravisCI obsługuje teraz wydania: https://docs.travis-ci.com/user/deployment/releases/

GitHub usunął API pobierania, ale zastąpił go releases: https://github.com/blog/1547-release-your-software

 1
Author: Jan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-14 07:28:55

Integracja SBT-Travis-Sonatype składa się z następujących głównych kroków:

  1. dodanie wtyczki SBT-pgp;
  2. generowanie pary kluczy do podpisywania artefaktów i publikowania ich na serwerze klucza publicznego;
  3. Szyfrowanie pary kluczy i plików poświadczeń sonatype i dodawanie ich do projektu;
  4. Tworzenie konfiguracji Travisa i dodawanie zaszyfrowanego klucza używanego przez Travisa do rozpakowania twoich tajnych plików.

Przygotowałem prostą instrukcję jak Zintegruj SBT z Travis-CI i Sonatype, jest on dostępny tutaj {[14] } i zawiera niezbędne kroki od konfiguracji wtyczek projektu do szyfrowania plików i zapewnienia konfiguracji Travis. Jest on oparty głównie na blogu programisty Johna Duffela połączonym z dokumentami referencyjnymi SBT-pgp.

 0
Author: uralian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-05 22:33:22