オープンソースプロジェクトに Travis CI を使用したいと思います。 Travisが、生成されたアーティファクトを公開する方法を提供していないという問題(ただし、将来の計画ではこれを持っています)。
どこかにアーティファクトを公開/アップロードするための回避策は何ですか? CIマシン上で任意のスクリプトを実行できます。
単純なアップロードは機能しますが、セキュリティ上の問題があります。すべてのソースが公開されているのと同じ方法で、誰でも何かをアップロードできます。
「github releases uploading」機能が最近発表されました。必要なすべてを公式にサポートします。 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
起こるのは、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 UIの[ビルドの再起動]ボタンをクリックする必要があります。
https://stackoverflow.com/a/38037626/895245 にはプロセスのスクリーンショットがあります。
代替方法:環境変数
暗号化された文字列の代わりに、非表示の環境変数を使用することもできます。
リポジトリのTravis設定でhttps://travis-ci.org/<me>/<myrepo>/settings
環境変数を作成します。
GITHUB_API_KEY=<token>
そして、「ビルドログに値を表示」を「オフ」としてマークし、次を使用します。
api_key: '$GITHUB_API_KEY'
これはプルリクエストのログには表示されませんが、ビルドの環境をリストアップしてしまう可能性があるため、この方法はリスクが高くなります。
利点は、この方法が理解しやすいことです。
Gnuplotから生成された画像をGitHubリリースにアップロードする私の簡単な例:
GitHubページの展開に関する質問: Travis CIからGithubページに公開する方法?
プロジェクトがGithubに基づいている場合(おそらくTravisを使用)、最も簡単な方法は、gh-pages
ブランチの下に生成されたアーティファクトをチェックインすることです。 Github の詳細を参照してください。
その方法は、使用するビルドシステムに大きく依存します。 Mavenでは、maven-scm-plugin
を使用できます-例があります here 。
編集:完全な例をここで見つけることができます: https://github.com/tonnymadsen/ui-bindings/blob/master/com.rcpcompany.updatesite/pom.xml
そのため、まずリリースアーティファクトを展開しようとする必要があります。 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を指します。
fileは、ビルドから生成されるビルドアーティファクトです。展開先gitHub.
on:
all_branches: true
tags: true
デプロイするタグの必須構成です。
いいえ、githubからapi_keyを取得する必要があります。
Update:Githubは今すぐDownload APIを無効にするので、以下の答えが考えられます。
私の解決策は、関連するスクリプトでtravis-ciおよび「Github repo Download API」によって提供される「安全な環境変数」を使用することです
Githubの各リポジトリにはダウンロードページがあり、アーティファクトを公開するのにも適しています。また、関連する「Repo Download API」 http://developer.github.com/v3/repos/downloads/ があります=
github-upload.rb
from https://github.com/wereHamster/ghup GitHub APIを管理します。最後に、.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/
これは古い質問だと思いますが、これまでに説明したものよりも優れていると思われる別のソリューションをミックスに追加したいと思います。
OPは、Travis-CIからの成果物の公開に興味があります。 https://bintray.com/を 組織 または自分の個人アカウント(両方の作品、ただしgithub組織の場合、それに一致する組織を持ち、そのgithub組織から公開されたアーティファクトがそれに一致するbintray組織に移動する方が合理的かもしれません)。
この理由は、bintrayが提供するものと、オープンソースプロジェクトをサポートしているためです。ここで概要をご覧になることをお勧めします。 http://www.jfrog.com/bintray/
JCenterへのリンク を使用することもできます。これにより、他の人が(maven、gradle、SBTなどを介して)消費/ダウンロード/使用するのがはるかに簡単になります。
Bintrayのセットアップ(アカウントまたは組織)を作成したら、travisと簡単に統合できます。 Java&maven builds)では、 travis-ciの暗号化された変数 オプションを使用して、${BINTRAY_USER}
および${BINTRAY_API_KEY}
を暗号化できます。 mavenのセットアップ リリースをbintrayにプッシュするためにデプロイします。mavensettings.xml
ファイルでは、travisで暗号化した環境変数をユーザー/パスとして参照するだけです。
<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 release plugin :mvn release:prepare
(後半を無視-release:preform)の前半を使用しました。これはあなたに代わってタグを作成したり、pomのバージョンをバンプしたりします。最終的には、githubのversion(-SNAPSHOTではなく)のタグです。このタグ付きコミットは、下流のtravisに到達し、.travis.yml
がTravisを構築して公開するように設定します。
.travis.yml
で、TRAVIS_TAG
、TRAVIS_PULL_REQUEST
、および その他のチェック を行いたいbeforemvn deploy
を呼び出します。これはafter_success
で行います。このように、travisはall時間をビルドしますが、は実行のみ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ユーザーを暗号化し、travisで bintray api key を使用すると、yamlに似たようなものが表示されます)
これにより、アーティファクトを「野生に」公開するためのフルエンドツーエンドのシステムが得られ、誰でも使用して使用できます。アーティファクトリポジトリ(ビントレイ)としてdesignedであるサービスを使用しており、Travisをスマートな方法で使用していますmaven release:prepareが生成するタグを確認します。一緒になって、リリースがいつ行われるか(mvn release:prepare
はローカルの開発ボックスから)を決定し、travisはそれらをリリースします。
Travisとbintrayビルドの間のより緊密な統合(travisプロバイダー)を取得するために、githubに既存の travis-ci/dpl pull request があることに注意してください。これにより、travisがアーティファクトをbintray(releasesに送信することがはるかに簡単になります.bintrayはSNAPSHOTを保持することを意図していなかったため、 Artifactory を使用します=その代わりに)。この記事を書いている時点では、githubにはリリースのサポートがいくつかありますが、bintrayはこの役割で優れており、適切なツールを使用できると信じています。
幸運を!
https://github.com/vorburger/mvnDeployGitHubTravisCI でサンプルプロジェクトをまとめました。これを行う方法を示しています(一部は githubでMavenリポジトリをホストする ) 。リンクされた回答で説明されているように、基本的な考え方は、 maven-deploy-pluginのaltDeploymentRepository を使用してローカルリポジトリを準備し、次に github site-maven-plugin を使用してアーティファクトを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をTravis-CIおよびSonatypeと統合する方法について簡単な説明をまとめました。これは利用可能です here で、プロジェクトプラグインの構成からファイルの暗号化とTravis構成の提供までの必要な手順が含まれています。これは、主にJohn Duffelの 開発者ブログ sbt-pgp参照ドキュメントと組み合わせたものに基づいています。