Как опубликовать артефакты в Travis CI?

Я хотел бы использовать Трэвис ки для моего проекта с открытым кодом. Проблема в том, что Трэвис не предоставляет никаких способов публикации произведенных артефактов (хотя у них это есть в их будущих планах).

какие обходные пути для публикации / загрузки артефактов где-то? Мне разрешено выполнять любые сценарии на компьютере CI.

простая загрузка будет работать, но есть проблема безопасности: любой сможет загрузить что-то так же, как и все источники общественный.

9 ответов


недавно объявлена функция "загрузка релизов github". Он официально поддерживает все, что нужно. См.http://docs.travis-ci.com/user/deployment/releases/


GitHub выпускает шаг за шагом

метод был упомянут в https://stackoverflow.com/a/24100779/895245, и плохо документировано на:https://docs.travis-ci.com/user/deployment/releases/, так что здесь идет более подробный шаг за шагом.

он загружает артефакты в выпуски GitHub https://github.com/<username>/<repo>/releases которые существуют для каждого тега Git, который вы нажимаете.

  1. получите персональный токен доступа под https://github.com/settings/tokens

    включить только доступ " public_repo "для публичных репозиториев," repo " для частных.

    сохраните токен где-нибудь, так как вы можете увидеть его только один раз.

  2. установить travis gem:

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

    затем cd в свой репозиторий и:

    travis encrypt <api-token>
    

    но совсем недавно люди сообщили, что travis encrypt -r githubusername/repositoryname --org вместо этого нужно, смотрите: https://github.com/travis-ci/travis-ci/issues/8128

    это произведет выход как:

    secure: "<encrypted-token>"
    

    запишите большой зашифрованный токен.

  3. использовать .travis.yml следующим образом:

    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
    

    что происходит, что Трэвис заменяет каждый something: secure: <encrypted-string> С something: <decrypted-string> как объяснено на:http://docs.travis-ci.com/user/encryption-keys/

    это безопасно, потому что только авторизованные pushes by вы можете расшифровать строку, поэтому, если вредоносный пользователь попытается сделать запрос на получение строки, он должен просто показать зашифрованную строку.

    теперь всякий раз, когда вы нажимаете фиксацию с тегом, Трэвис будет загружать release.zip в выпуске:

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

    если вы уже нажали фиксацию и тег после, вам, возможно, придется нажать кнопку "Перезапустить сборку" на пользовательском интерфейсе Travis, чтобы загружать.

https://stackoverflow.com/a/38037626/895245 имеет некоторые скриншоты процесса.

альтернативный метод: переменная среды

  1. вместо зашифрованной строки мы также можем использовать скрытую переменную среды.

    в настройках Travis для репозитория https://travis-ci.org/<me>/<myrepo>/settings создайте переменную окружения:

    GITHUB_API_KEY=<token>
    

    и не забудьте отметить "Отображать значение в журнале сборки" как "выкл" и использовать:

    api_key: '$GITHUB_API_KEY'
    

    хотя это не будет отображаться в журналах для запросов pull, этот метод рискованнее, так как вы могли бы мой список ошибок среды сборки.

    преимущество в том, что этот метод проще понять.

простой пример, который загружает изображения, созданные из Gnuplot в GitHub релизы:

вопрос о развертывании страниц GitHub:как опубликовать на Github страницы из Travis CI?


Если ваш проект основан на Github-вероятно, с Трэвисом - тогда самый простой способ-проверить сгенерированные артефакты под gh-pages филиала. Подробнее о Github.

Как это сделать, во многом зависит от используемой системы сборки. С Maven, вы можете использовать maven-scm-plugin - вы можете найти пример здесь.

EDIT: вы можете найти полный пример здесь: https://github.com/tonnymadsen/ui-bindings/blob/master/com.rcpcompany.updatesite/pom.xml


поэтому сначала вы должны быть уверены, что пытаетесь развернуть артефакты выпуска. Поэтому сначала сделайте тег в Github. Чтобы сделать это вручную:

enter image description here

затем в .travis.yml file добавьте следующую конфигурацию. Для пользователей 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

здесь api_key значение Трэвис Ки переменные среды. Что указывает на GitHub api_key.

является артефактом сборки, произведенным из строить. Который мы хотим развернуть в gitHub.

on:
    all_branches: true
    tags: true

является обязательной конфигурацией для развертываемых тегов.

нет, вы должны получить api_key от github:

  1. на Личные Жетоны Доступа

enter image description here

  1. выбрать создать новый маркер

enter image description here

  1. выберите соответствующие области для api_key enter image description here
  2. скопируйте сгенерированный api_key enter image description here
  3. перейдите в Travis Ci и добавьте переменную среды. Для этого выберите настройки enter image description here
    1. вставить сгенерированный api_key enter image description here

при запуске новой сборки артефакт будет развертываемый. enter image description here


обновление: GitHub отключите API загрузки сейчас, поэтому ниже Ответ-идея.

мое решение использует "безопасные переменные среды", предоставляемые travis-ci и" GitHub repo Download API " со связанным скриптом

каждый РЕПО в Github имеет страницы загрузки, это также хорошее место для публикации ваших артефактов, и он имеет связанный "Repo Download API" http://developer.github.com/v3/repos/downloads/

В конце концов, в .travis-ci.yml похоже, ниже

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

см. мой блог подробно: http://larrycaiyu.com/blog/2012/10/25/publish-the-artifacts-inside-travis-ci-to-github/


Я понимаю, что это старый вопрос, но я хотел бы добавить еще одно решение миксе, на мой взгляд, лучше, чем те, которые обсуждались до сих пор.

Использовать Bintray:

OP заинтересован в публикации артефакты из Travis-CI. Я рекомендую использовать https://bintray.com/ с организация или ваш личный кабинет (оба работают, но в случае организации github это может сделать больше смысла иметь организацию, которая соответствует ей,и опубликованные артефакты из этой организации github идут к ней, соответствующей организации bintray).

причина этого заключается в том, что Bintray предлагает поддержку проектов с открытым исходным кодом. Я рекомендую вам взглянуть здесь на их обзор:http://www.jfrog.com/bintray/

вы можете ссылка на JCenter, что делает то, что вы публикуете, намного проще для кого-либо еще потреблять/загружать/использовать (через maven, gradle, SBT и т. д.).

Для Java + Maven:

после того, как у вас есть Bintray setup (ваша учетная запись создана или организация), вы можете легко интегрировать его с travis. Для сборки java & maven можно использовать зашифрованные переменные Трэвиса-ки возможность шифрования ${BINTRAY_USER} и ${BINTRAY_API_KEY}. Тогда вы можете настроить maven развертывание для запуска релизов в bintray. В мавене!--5--> file, вы просто ссылаетесь на переменные среды, которые вы зашифровали с Трэвисом в качестве пользователя / pass, т. е.:

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

Далее, вы добавите distributionManagement раздел вашего проекта pom.xml, что-то вроде этого:

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

тогда вы настроите свой .travis.yml файл для "обнаружения", когда есть выпуск. Я использовал первую половину в Maven-релиз плагина: mvn release:prepare (игнорируя вторую половину -- release: preform) из вашего локального окна dev. Это сделает тег, ударит версию в pom и т. д. От вашего имени. Чем ты закончишь? это тег версия (не-снимок) в github. Этот помеченный commit пробирается вниз по течению к Трэвису, где ваш .travis.yml настроит Travis для сборки и публикации.

в своем .travis.yml, настройте его для тестирования на TRAVIS_TAG, TRAVIS_PULL_REQUEST и любые другие проверки вы хотите сделать до вызов mvn deploy. Вы бы сделали это на after_success. Таким образом, Трэвис строит все, но только mvn deploy когда это тег и соответствует другим условиям, которые вы хотите (например, сборка JDK8). Вот пример .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=

(secure-это просто придуманный пример, после того, как вы зашифруете своего пользователя bintray и ключ api bintray с Трэвисом вы увидите что-то похожее в своем yaml)

это дает вам полную сквозную систему для публикации артефактов "в дикой природе", где каждый может потреблять и использовать. Вы используете сервис, который предназначен С нуля в качестве хранилища артефактов (bintray), и вы используете Travis умным способом чтобы проверить теги, которые выпускает maven: подготовка производит. Все вместе вы решаете, когда выпускаются релизы (mvn release:prepare из локальной коробка Дев), и Тревис им bintray.

другое

обратите внимание, что существуетзапрос тяги Трэвис-ки/ДПЛ в github, чтобы получить более тесную интеграцию (поставщики travis) между Тревис и bintray причине. Это значительно упрощает отправку Тревисом артефактов в bintray (выпускает; bintray не предназначался для хранения снимков, используйте Artifactory вместо этого). Несмотря на то, что github имеет некоторую поддержку релизов, на момент написания этой статьи я считаю, что bintray превосходит эту роль и правильный инструмент для использования.

удачи!


Я собрал пример проекта в https://github.com/vorburger/mvnDeployGitHubTravisCI иллюстрируя, как это сделать (частично на основе хостинг репозитория Maven на github). Как объясняется в связанном ответе, основная идея заключается в подготовке локального репозитория с использованием maven-deploy-плагин altDeploymentRepository, а затем использовать сайт github-Maven-плагин чтобы подтолкнуть ваши артефакты на GitHub. Подключение Travis к GitHub аутентификация, как описано выше.


TravisCI теперь поддерживает выпуски:https://docs.travis-ci.com/user/deployment/releases/

GitHub удалил API загрузки, но заменил его выпусками:https://github.com/blog/1547-release-your-software


интеграция SBT-Travis-Sonatype состоит из следующих основных шагов:

  1. добавление плагина sbt-pgp;
  2. создание пары ключей для подписания артефактов и их публикации на сервере открытых ключей;
  3. шифрование пары ключей и файлов учетных данных sonatype и добавление их в проект;
  4. создание конфигурации travis и добавление зашифрованного ключа, используемого Travis для распаковки ваших секретных файлов.

Я положил вместе с простой инструкцией о том, как интегрировать SBT с Travis-CI и Sonatype, он доступен здесь и содержит необходимые шаги от настройки плагинов проекта до шифрования файлов и предоставления конфигурации Travis. Он в основном основан наблог разработчиков в сочетании со справочными документами sbt-pgp.