54

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

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

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

4

10 に答える 10

44

GitHubは段階的にリリースします

この方法はhttps://stackoverflow.com/a/24100779/895245で言及されており、https: //docs.travis-ci.com/user/deployment/releases/で十分に文書化されていないため、ここでさらに詳しく説明します。ステップバイステップ。

https://github.com/<username>/<repo>/releasesプッシュするすべてのGitタグに存在するアーティファクトをGitHubリリースにアップロードします。

  1. https://github.com/settings/tokensでパーソナルアクセストークンを取得します

    パブリックリポジトリの場合は「public_repo」アクセスのみを有効にし、プライベートリポジトリの場合は「repo」アクセスのみを有効にします。

    トークンは1回しか表示されないため、どこかに保存してください。

  2. travisgemをインストールします。

    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
    

    後でコミットとタグをすでにプッシュしている場合は、TravisUIの[ビルドの再開]ボタンをクリックしてアップロードする必要があります。

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 Pagesのデプロイに関する質問:TravisCIからGithubPagesに公開するにはどうすればよいですか?

于 2015-10-13T18:00:52.517 に答える
30

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

于 2014-06-07T19:22:46.530 に答える
10

プロジェクトがGitHubに基づいている場合(おそらくTravisを使用している場合)、最も簡単な方法は、gh-pagesブランチの下で生成されたアーティファクトをチェックインすることです。GitHubで詳細をご覧ください。

その方法は、使用するビルドシステムによって大きく異なります。Mavenを使用すると、次を使用できます。ここmaven-scm-pluginで例を見つけることができます。

編集:ここで完全な例を見つけることができます:https ://github.com/tonnymadsen/ui-bindings/blob/master/com.rcpcompany.updatesite/pom.xml

于 2012-09-17T18:16:03.160 に答える
8

したがって、最初に、リリースアーティファクトをデプロイしようとしていることを確認する必要があります。したがって、最初に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値はTravisCi環境変数です。これはGithubapi_keyを指します。

fileは、ビルドから生成されたビルドアーティファクトです。gitHubにデプロイしたいもの。

on:
    all_branches: true
    tags: true

デプロイするタグの必須構成です。

いいえ、githubからapi_keyを取得する必要はありません。

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

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

  1. api_keyの適切なスコープを選択します ここに画像の説明を入力してください
  2. 生成されたapi_keyをコピーします ここに画像の説明を入力してください
  3. Travis Ciに移動し、環境変数を追加します。そのためには、[設定]を選択します ここに画像の説明を入力してください
    1. 生成されたapi_keyを貼り付けます ここに画像の説明を入力してください

新しいビルドをトリガーすると、アーティファクトがデプロイされます。 ここに画像の説明を入力してください

于 2016-06-26T10:37:45.347 に答える
6

更新:GitHubは今すぐダウンロードAPIを無効にするので、以下の答えがアイデアです。

私の解決策は、travis-ciが提供する「安全な環境変数」と関連するスクリプトを含む「GitHubリポジトリダウンロードAPI」を使用することです。

GitHubの各リポジトリにはダウンロードページがあり、アーティファクトを公開するのにも適しています。また、関連する「リポジトリダウンロード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/

于 2012-10-25T11:16:25.663 に答える
6

これは古い質問だと思いますが、これまでに説明したものよりも優れていると私が信じている別の解決策をミックスに追加したいと思います。

Bintrayを使用する:

OPは、Travis-CIからのアーティファクトの公開に関心があります。組織または自分の個人アカウントのいずれかでhttps://bintray.com/を使用することをお勧めします(どちらも機能しますが、github組織の場合は、それに一致する組織と公開されたアーティファクトを使用する方が理にかなっています。そのgithuborgから、一致するbintray orgに移動します)。

この理由は、bintrayが提供するものと、オープンソースプロジェクトのサポートによるものです。ここでそれらの概要を確認することをお勧めします:http ://www.jfrog.com/bintray/

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

Java + Mavenの場合:

bintrayのセットアップ(アカウントの作成または組織)が完了すると、travisと簡単に統合できます。java&mavenビルドの場合、travis-ciの暗号化変数オプションを使用して${BINTRAY_USER}とを暗号化できます${BINTRAY_API_KEY}。次に、リリースをbintrayにプッシュするようにmavenデプロイを設定できます。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リリースプラグインの前半を使用しました:(mvn release:prepare後半を無視して--release:preform)。これにより、タグが作成され、pomにバージョンが追加されます。最終的には、githubのバージョン(-SNAPSHOTではない)のタグになります。このタグ付けされたコミットは、travisのダウンストリームに進みます。ここで、.travis.ymlTravisをビルドおよび公開するように構成します。

で、を呼び出す前に、、、およびその他のチェック.travis.ymlテストするように構成します。でこれを行います。このように、travisは常にビルドしますが、タグであり、必要な他の条件(JDK8ビルドなど)を満たしている場合にのみ実行されます。次に例を示します。TRAVIS_TAGTRAVIS_PULL_REQUESTmvn deployafter_success mvn deploy.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キーをtravisで暗号化すると、yamlに似たようなものが表示されます)

これにより、アーティファクトを「野生に」公開するための完全なエンドツーエンドのシステムが得られ、誰でも消費して使用できるようになります。アーティファクトリポジトリ(bintray)としてゼロから設計されたサービスを使用しており、Maven Release:prepareが生成するタグをスマートにチェックするためにTravisを使用しています。一緒に、リリースがいつ行われるかを(mvn release:prepareローカルの開発ボックスから)決定し、travisはそれらをbintrayに取得します。

他の

githubには既存のtravis-ci/dplプルリクエストがあり、Travisとbintrayのより緊密な統合(travisプロバイダー)が構築されていることに注意してください。これにより、travisがアーティファクトをbintrayに送信するのがはるかに簡単になります(リリース。bintrayはSNAPSHOTを保持することを目的としていませんでした。代わりに、 Artifactoryを使用してください)。githubはリリースをある程度サポートしていますが、この記事の執筆時点では、bintrayがこの役割で優れており、使用するのに適切なツールであると信じています。

幸運を!

于 2015-06-03T04:28:32.600 に答える
2

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

于 2013-08-08T07:07:59.030 に答える
2

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

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

于 2016-04-14T07:28:55.327 に答える
0

SBT-Travis-Sonatypeの統合は、次の主要なステップで構成されています。

  1. sbt-pgpプラグインの追加;
  2. アーティファクトに署名して公開鍵サーバーに公開するための鍵ペアを生成します。
  3. キーペアとソナタイプのクレデンシャルファイルを暗号化し、プロジェクトに追加します。
  4. travis構成を作成し、Travisが秘密ファイルを解凍するために使用する暗号化されたキーを追加します。

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

于 2016-04-05T22:33:22.877 に答える
0

自分自身に問うべき最初の質問は、CIビルドからアーティファクトを公開するかどうか、またはリリースを(つまりGitHubに)デプロイするかどうかです。

ここにはGitHubへのリリースのアップロードに関して多くの回答があるため、このトピックについてはこれ以上取り上げません。

スナップショット/CIビルドアーティファクトを取得する場合、最も簡単な方法は、それらをAWSS3にアップロードすることです。残念ながら、これに関するドキュメントは、特にAWSの経験がない場合は、少しラフです。だからここにあなたがしなければならないことがあります:

1.TravisのAWSIAMユーザーを作成します

これを行うには、https://console.aws.amazon.com/iam/home?# / usersにアクセスし、プログラムアクセスタイプのTravisの新しいユーザーアカウントを作成します。[パーミッション]タブで既存のポリシーAmazonS3FullAccessを適用して、S3へのアクセスを許可します。

ユーザーが作成されたら、アクセスキーIDとそのユーザーのシークレットアクセスキーを必ずコピーしてください。

2.TravisにアップロードするAWSS3バケットを作成します

それはかなり簡単です。注意すべき唯一のことは、、などのような署名v4のみの領域を避けることです(https://github.com/travis-ci/artifacts/issues/57ため)。確かな選択はです。これは、Travisが期待するデフォルトでもあるため、追加の構成を少し節約できます。もちろん、この要件を満たす既存のバケットを使用することもできます。us-east-2eu-central-1us-east-1

3.環境変数をTravisCIリポジトリ設定に追加します

次に、Travisのリポジトリの設定に移動します。次の新しい環境変数を作成します。

ARTIFACTS_KEY=(AWS access key id from step 1)
ARTIFACTS_SECRET=(AWS secret access key from step 1)
ARTIFACTS_BUCKET=(S3 bucket name from step 2)

4.アーティファクトアドオンを有効にする

.travis.yml最後に、アーティファクトアドオンをアクティブ化するために、リポジトリで次の行をに追加します

addons:
  artifacts: true

すべてがうまくいけば、ビルドアーティファクトがS3バケットにポップアップ表示されるはずです。ドキュメントで説明されているように、スキャンされるパスなどを調整することをお勧めします

それが誰かまたは他の人を助けることを願っています。

于 2019-12-05T05:57:48.977 に答える