web-dev-qa-db-ja.com

Travis CIでアーティファクトを公開する方法は?

オープンソースプロジェクトに Travis CI を使用したいと思います。 Travisが、生成されたアーティファクトを公開する方法を提供していないという問題(ただし、将来の計画ではこれを持っています)。

どこかにアーティファクトを公開/アップロードするための回避策は何ですか? CIマシン上で任意のスクリプトを実行できます。

単純なアップロードは機能しますが、セキュリティ上の問題があります。すべてのソースが公開されているのと同じ方法で、誰でも何かをアップロードできます。

49
eigenein

「github releases uploading」機能が最近発表されました。必要なすべてを公式にサポートします。 http://docs.travis-ci.com/user/deployment/releases/ を参照してください

27
minghua

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
    

    起こるのは、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 にはプロセスのスクリーンショットがあります。

代替方法:環境変数

  1. 暗号化された文字列の代わりに、非表示の環境変数を使用することもできます。

    リポジトリの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

8
Tonny Madsen

そのため、まずリリースアーティファクトを展開しようとする必要があります。 Githubで最初にタグを作成します。手動で行うには:

enter image description here

次に、.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を取得する必要があります。

  1. パーソナルアクセストークンに移動します

enter image description here

  1. を選択します新しいトークンを生成します

enter image description here

  1. api_keyenter image description here
  2. 生成されたapi_keyをコピーします enter image description here
  3. Travis Ciに移動して、環境変数を追加します。そのためには、Settingsenter image description here
    1. 生成されたapi_keyを貼り付けます enter image description here

新しいビルドをトリガーすると、アーティファクトがデプロイされます。 enter image description here

7
Xelian

Update:Githubは今すぐDownload 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/

5
Larry Cai

これは古い質問だと思いますが、これまでに説明したものよりも優れていると思われる別のソリューションをミックスに追加したいと思います。

Bintrayを使用:

OPは、Travis-CIからの成果物の公開に興味があります。 https://bintray.com/組織 または自分の個人アカウント(両方の作品、ただしgithub組織の場合、それに一致する組織を持ち、そのgithub組織から公開されたアーティファクトがそれに一致するbintray組織に移動する方が合理的かもしれません)。

この理由は、bintrayが提供するものと、オープンソースプロジェクトをサポートしているためです。ここで概要をご覧になることをお勧めします。 http://www.jfrog.com/bintray/

JCenterへのリンク を使用することもできます。これにより、他の人が(maven、gradle、SBTなどを介して)消費/ダウンロード/使用するのがはるかに簡単になります。

Java + Maven:

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 pluginmvn release:prepare(後半を無視-release:preform)の前半を使用しました。これはあなたに代わってタグを作成したり、pomのバージョンをバンプしたりします。最終的には、githubのversion(-SNAPSHOTではなく)のタグです。このタグ付きコミットは、下流のtravisに到達し、.travis.ymlがTravisを構築して公開するように設定します。

.travis.ymlで、TRAVIS_TAGTRAVIS_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はこの役割で優れており、適切なツールを使用できると信じています。

幸運を!

4
Jack

https://github.com/vorburger/mvnDeployGitHubTravisCI でサンプルプロジェクトをまとめました。これを行う方法を示しています(一部は githubでMavenリポジトリをホストする ) 。リンクされた回答で説明されているように、基本的な考え方は、 maven-deploy-pluginのaltDeploymentRepository を使用してローカルリポジトリを準備し、次に github site-maven-plugin を使用してアーティファクトをGitHubにプッシュします。上記の説明に従ってTravisをGitHub認証に接続します。

2
vorburger

TravisCIがリリースをサポートするようになりました: https://docs.travis-ci.com/user/deployment/releases/

GitHubはダウンロードAPIを削除しましたが、リリースに置き換えました: https://github.com/blog/1547-release-your-software

1
Jan

統合SBT-Travis-Sonatypeは、次の主要な手順で構成されています。

  1. Sbt-pgpプラグインの追加。
  2. アーティファクトに署名するためのキーペアを生成し、公開キーサーバーで公開します。
  3. キーペアとsonatypeの資格情報ファイルを暗号化し、プロジェクトに追加します。
  4. Travis構成を作成し、Travisが秘密ファイルを解凍するために使用する暗号化キーを追加します。

SBTをTravis-CIおよびSonatypeと統合する方法について簡単な説明をまとめました。これは利用可能です here で、プロジェクトプラグインの構成からファイルの暗号化とTravis構成の提供までの必要な手順が含まれています。これは、主にJohn Duffelの 開発者ブログ sbt-pgp参照ドキュメントと組み合わせたものに基づいています。

0
uralian