Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 2

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

Метод упоминался в fooobar.com/questions/136258/... и плохо документирован по адресу: https://docs.travis-ci.com/user/deployment/releases/, поэтому здесь идет более подробный шаг за шагом.

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

  • Получите токен личного доступа под https://github.com/settings/tokens

    Разрешить доступ только для public public-репозиторий для публичных репозиториев, "репо" для частных.

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

  • Установите драгоценный камень travis:

    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>"
    

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

  • Используйте .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
    

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

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

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

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

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

fooobar.com/questions/136258/... имеет несколько скриншотов процесса.

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

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

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

    GITHUB_API_KEY=<token>
    

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

    api_key: '$GITHUB_API_KEY'
    

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

    Поверхность заключается в том, что этот метод проще понять.

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

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

Ответ 3

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

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

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

Ответ 4

Обновить. Теперь Github отключает API загрузки, поэтому ниже ответ - идея.

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

Каждое репо в Github имеет страницы загрузки, это также хорошее место для публикации ваших артефактов, и у него есть связанный "API загрузки Repo" 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/

Ответ 5

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

введите описание изображения здесь

Затем в файле .travis.yml добавьте следующую конфигурацию. Для пользователей 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 - это переменная окружения Travis Ci. Что указывает на Github api_key.

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

on:
    all_branches: true
    tags: true

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

Нет, вам нужно получить api_key из github:

  • Перейдите в токены личного доступа

введите описание изображения здесь

  1. Выберите Создать новый токен

введите описание изображения здесь

  1. Выберите соответствующие области для api_key введите описание изображения здесь
  2. Скопировать созданный файл api_key введите описание изображения здесь
  3. Перейдите в Travis Ci и добавьте переменную окружения. Для этого выберите Настройки введите описание изображения здесь
    1. Вставьте сгенерированную api_key введите описание изображения здесь

При запуске новой сборки артефакт будет развернут. введите описание изображения здесь

Ответ 6

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

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

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

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

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

Для Java + Maven:

Как только у вас установлена ​​настройка bintray (ваша учетная запись создана или org), вы можете легко интегрировать ее с travis. Для java и maven вы можете использовать travis-ci encrypted variables для шифрования ${BINTRAY_USER} и ${BINTRAY_API_KEY}. Затем вы можете настроить maven для развертывания выпусков в bintray. В файле maven settings.xml вы будете просто ссылаться на переменные среды, которые вы зашифровали с помощью travis в качестве пользователя /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 (игнорируя вторую половину выпуска: преформа) от вашего локального разработчика коробка. Это сделает тэг, ударит версию в pom и т.д. От вашего имени. В итоге вы получаете тег версии (not -SNAPSHOT) в github. Этот помеченный фиксатор переходит в трейнис, где ваш .travis.yml будет настраивать Travis для создания и публикации.

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

(Безопасный - это только пример, который после шифрования пользователя bintray и bintray api key с помощью travis, вы увидите что-то подобный в вашем yaml)

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

Другие

Обратите внимание, что существует существующий travis-ci/dpl pull request в github, чтобы получить более тесную интеграцию (travis providers) между Travis и bintray. Это значительно облегчает отправку артефактов travis в bintray ( релизы; bintray не предназначался для хранения SNAPSHOT, используйте Artifactory для этого). Несмотря на то, что github имеет определенную поддержку релизов, на момент написания этой статьи я считаю, что bintray должен быть превосходным в этой роли и правильным инструментом для использования.

Удачи!

Ответ 7

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

Ответ 9

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

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

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