オープンソースプロジェクトにTravisCIを使用したいと思います。Travisが生成されたアーティファクトを公開する方法を提供していないという問題(ただし、将来の計画ではこれがあります)。
アーティファクトをどこかに公開/アップロードするための回避策は何ですか?CIマシンで任意のスクリプトを実行できます。
単純なアップロードは機能しますが、セキュリティの問題があります。すべてのソースが公開されているのと同じ方法で、誰でも何かをアップロードできます。
GitHubは段階的にリリースします
この方法はhttps://stackoverflow.com/a/24100779/895245で言及されており、https: //docs.travis-ci.com/user/deployment/releases/で十分に文書化されていないため、ここでさらに詳しく説明します。ステップバイステップ。
https://github.com/<username>/<repo>/releases
プッシュするすべてのGitタグに存在するアーティファクトをGitHubリリースにアップロードします。
https://github.com/settings/tokensでパーソナルアクセストークンを取得します
パブリックリポジトリの場合は「public_repo」アクセスのみを有効にし、プライベートリポジトリの場合は「repo」アクセスのみを有効にします。
トークンは1回しか表示されないため、どこかに保存してください。
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
後でコミットとタグをすでにプッシュしている場合は、TravisUIの[ビルドの再開]ボタンをクリックしてアップロードする必要があります。
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 Pagesのデプロイに関する質問:TravisCIからGithubPagesに公開するにはどうすればよいですか?
「githubリリースのアップロード」機能が最近発表されました。必要なものすべてを公式にサポートします。http://docs.travis-ci.com/user/deployment/releases/を参照してください
プロジェクトがGitHubに基づいている場合(おそらくTravisを使用している場合)、最も簡単な方法は、gh-pages
ブランチの下で生成されたアーティファクトをチェックインすることです。GitHubで詳細をご覧ください。
その方法は、使用するビルドシステムによって大きく異なります。Mavenを使用すると、次を使用できます。ここmaven-scm-plugin
で例を見つけることができます。
編集:ここで完全な例を見つけることができます: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値はTravisCi環境変数です。これはGithubapi_keyを指します。
fileは、ビルドから生成されたビルドアーティファクトです。gitHubにデプロイしたいもの。
on:
all_branches: true
tags: true
デプロイするタグの必須構成です。
いいえ、githubからapi_keyを取得する必要はありません。
更新:GitHubは今すぐダウンロードAPIを無効にするので、以下の答えがアイデアです。
私の解決策は、travis-ciが提供する「安全な環境変数」と関連するスクリプトを含む「GitHubリポジトリダウンロードAPI」を使用することです。
GitHubの各リポジトリにはダウンロードページがあり、アーティファクトを公開するのにも適しています。また、関連する「リポジトリダウンロードAPI」http://developer.github.com/v3/repos/downloads/があります。
github-upload.rb
を使用して、GitHubAPIを管理します。結局、.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組織の場合は、それに一致する組織と公開されたアーティファクトを使用する方が理にかなっています。そのgithuborgから、一致するbintray orgに移動します)。
この理由は、bintrayが提供するものと、オープンソースプロジェクトのサポートによるものです。ここでそれらの概要を確認することをお勧めします:http ://www.jfrog.com/bintray/
JCenterにリンクすることもできます。これにより、公開したものを他の人が(maven、gradle、SBTなどを介して)消費/ダウンロード/使用するのがはるかに簡単になります。
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.yml
Travisをビルドおよび公開するように構成します。
で、を呼び出す前に、、、およびその他のチェックを.travis.yml
テストするように構成します。でこれを行います。このように、travisは常にビルドしますが、タグであり、必要な他の条件(JDK8ビルドなど)を満たしている場合にのみ実行されます。次に例を示します。TRAVIS_TAG
TRAVIS_PULL_REQUEST
mvn deploy
after_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がこの役割で優れており、使用するのに適切なツールであると信じています。
幸運を!
これを行う方法を示すサンプルプロジェクトをhttps://github.com/vorburger/mvnDeployGitHubTravisCIにまとめました(一部はgithubでのMavenリポジトリのホスティングに基づいています)。リンクされた回答で説明されているように、基本的な考え方は、maven-deploy-pluginのaltDeploymentRepositoryを使用してローカルリポジトリを準備し、次にgithubsite -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と統合する方法についての簡単な説明をまとめました。これはここから入手でき、プロジェクトプラグインの構成からファイルの暗号化およびTravis構成の提供までの必要な手順が含まれています。これは主に、JohnDuffelの開発者ブログとsbt-pgpリファレンスドキュメントを組み合わせたものに基づいています。
自分自身に問うべき最初の質問は、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-2
eu-central-1
us-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バケットにポップアップ表示されるはずです。ドキュメントで説明されているように、スキャンされるパスなどを調整することをお勧めします。
それが誰かまたは他の人を助けることを願っています。