Как опубликовать артефакты в 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, который вы нажимаете.
-
получите персональный токен доступа под https://github.com/settings/tokens
включить только доступ " public_repo "для публичных репозиториев," repo " для частных.
сохраните токен где-нибудь, так как вы можете увидеть его только один раз.
-
установить
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>"
запишите большой зашифрованный токен.
-
использовать
.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 имеет некоторые скриншоты процесса.
альтернативный метод: переменная среды
-
вместо зашифрованной строки мы также можем использовать скрытую переменную среды.
в настройках Travis для репозитория
https://travis-ci.org/<me>/<myrepo>/settings
создайте переменную окружения:GITHUB_API_KEY=<token>
и не забудьте отметить "Отображать значение в журнале сборки" как "выкл" и использовать:
api_key: '$GITHUB_API_KEY'
хотя это не будет отображаться в журналах для запросов pull, этот метод рискованнее, так как вы могли бы мой список ошибок среды сборки.
преимущество в том, что этот метод проще понять.
простой пример, который загружает изображения, созданные из Gnuplot в GitHub релизы:
- https://github.com/cirosantilli/gnuplot-examples/blob/b76d5a7c7aa2af973accdc9639220df74c36285e/.travis.yml#L23
- https://github.com/cirosantilli/gnuplot-cheat/releases
вопрос о развертывании страниц 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. Чтобы сделать это вручную:
затем в .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:
- на Личные Жетоны Доступа
- выбрать создать новый маркер
обновление: GitHub отключите API загрузки сейчас, поэтому ниже Ответ-идея.
мое решение использует "безопасные переменные среды", предоставляемые travis-ci и" GitHub repo Download API " со связанным скриптом
каждый РЕПО в Github имеет страницы загрузки, это также хорошее место для публикации ваших артефактов, и он имеет связанный "Repo Download API" http://developer.github.com/v3/repos/downloads/
- безопасное переменная окружения может ссылаться на другой вопрос:добавить секретную переменную среды в Travis CI
- используйте хороший скрипт
github-upload.rb
от https://github.com/wereHamster/ghup для управления API GitHub.
В конце концов, в .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 состоит из следующих основных шагов:
- добавление плагина sbt-pgp;
- создание пары ключей для подписания артефактов и их публикации на сервере открытых ключей;
- шифрование пары ключей и файлов учетных данных sonatype и добавление их в проект;
- создание конфигурации travis и добавление зашифрованного ключа, используемого Travis для распаковки ваших секретных файлов.
Я положил вместе с простой инструкцией о том, как интегрировать SBT с Travis-CI и Sonatype, он доступен здесь и содержит необходимые шаги от настройки плагинов проекта до шифрования файлов и предоставления конфигурации Travis. Он в основном основан наблог разработчиков в сочетании со справочными документами sbt-pgp.