web-dev-qa-db-ja.com

Travis CIからGithubページに公開する方法は?

私たちはtravis-ciサーバーでDoxygenドキュメントをコンパイルしており、それらをgh-pagesブランチにプッシュしたいと考えています。

git Pushの承認をどのように処理しますか?誰かがtravis-ciで暗号化された変数を使用する例を持っていますか? https認証またはSSHキーのどちらを使用する必要がありますか?

32
Stasik

環境変数にHTTPS APIトークンを使用した段階的な例

他の人がそれについて言及していますが、ここではより詳細な手順を説明します。

  1. Webサイト用に別のリポジトリを作成します(オプション)。これにより、メインリポジトリを上書きする可能性が低くなり、出力ファイルがそれを汚染するのを防ぎます。

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

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

    トークンは一度しか表示されないため、どこかに保存します。

  3. リポジトリhttps://travis-ci.org/<me>/<myrepo>/settingsのTravis設定で、環境変数を作成します。

    GITHUB_API_KEY=<token>
    

    また、[ビルドログに値を表示]を[オフ]に設定してください。

    このような環境変数が表示されるのは承認されたプッシュのみであるため安全です。悪意のあるユーザーがプルリクエストを実行して文字列を取得しようとすると、変数はそこに存在しません。

    ビルド時に環境変数をリストしないでください。

  4. 以下を.travis.ymlに追加します。

    after_success: |
      if [ -n "$GITHUB_API_KEY" ]; then
        cd "$TRAVIS_BUILD_DIR"
        # This generates a `web` directory containing the website.
        make web
        cd web
        git init
        git checkout -b gh-pages
        git add .
        git -c user.name='travis' -c user.email='travis' commit -m init
        # Make sure to make the output quiet, or else the API token will leak!
        # This works because the API key can replace your password.
        git Push -f -q https://<me>:[email protected]/<me>/<myrepo>-gh-pages gh-pages &>/dev/null
        cd "$TRAVIS_BUILD_DIR"
      fi
    

代替のトラビス暗号化方法

https://stackoverflow.com/a/33109519/895245 で詳細に説明されています

文字列GITHUB_API_KEY=<key>travis gemで暗号化し、.travis.ymlに追加します。

env:
  secure: <encrypted>

これには、Travis Webインターフェースを使用する必要がないという利点がありますが、Gemを使用してコピーを貼り付ける必要があります。

最近のことはわかりませんが、Travisには組み込みの展開オプションがあり、基本的にはtravisファイルに追加します。

deploy:
  provider: pages
  skip_cleanup: true
  local_dir: myfolder/  # or remove this line to upload from root of repo
  github_token: $GITHUB_TOKEN # Set in travis-ci.org dashboard
  on:
    branch: master

アップロードしたフォルダに.gitignoreがないことを確認してください。無視されないファイルのみがアップロードされます。

Travisのオンライン公式ドキュメントを参照してください: https://docs.travis-ci.com/user/deployment/pages/

「リポジトリ設定」アプローチを使用した公開鍵の問題はありません。Githubで鍵を生成し、それをコピーしてTravisの秘密/非表示フィールドに貼り付けます。

アップロード履歴の問題:アップロードするたびに、履歴を保持せずに、以前にアップロードしたデータがすべて破棄されることに注意してください。

  • (2017年11月以降)keep_history: true行を追加することで、代わりに履歴を保持できるようになりました

  • これらのスナップショットビルドは膨大な量になる可能性があるため、これは望ましい場合があります。また、とにかく自由に再現できます(必要なリビジョンからデポをブランチに戻すだけです)。このようなアーティファクトを指すことは、通常、スナップショットの最後に成功したビルドを指します。

  • ただし、安定した場所へのストレージをトリガーするには、トラビスを編集してフラグを追加します。
    target_branch:Branch to Push force、デフォルトはgh-pages
    target_branch:rc1.2

そして、スナップショットモードに戻す前に一度実行します。

リリースに適した別の代替手段(私は個人的にテストしていません)は、タグに公開することです: https://docs.travis-ci.com/user/deployment/releases/

30
Yann TM

travis-ciドキュメントはこちら これをPushにgitリポジトリに追加することをお勧めします:

after_success:
   - chmod 600 .travis/deploy_key.pem # this key should have Push access
   - ssh-add .travis/deploy_key.pem
   - git remote add deploy DEPLOY_REPO_URI_GOES_HERE
   - git Push deploy

ただし、保護されていない秘密鍵をgithubリポジトリに保存しているため、これは安全ではありません

代わりに、travisツールを使用して、sshキーを 暗号化された環境変数 として追加できます。

travis encrypt DEPLOY_KEY=<private ssh key with write access> --add env.matrix

次に、この行をafter_successの先頭に追加する必要があります。

cat $DEPLOY_KEY > .travis/deploy_key.pem

ビルドマトリックスのすべてのビルドでafter_successが切り替わるので、ビルドごとに複数のジョブがある場合、コードは複数回プッシュされますが、何も実行されませんが、発生していることを知っておくとよいでしょう。

12
joshua-anderson

別のソリューションを追加するために、私はgithubからのHTTPSトークンを使用して暗号化し、チェックアウトとプッシュにHTTPSを使用しました

10
Stasik

私は数日前にこれについてブログを書いたところです。こちらが概要です:

私は カスタムデプロイスクリプト をこの目的で作成しました。スクリプトのコア機能は次のようになります。

#!/bin/bash

git clone --depth=1 --branch=master "https://github.com/iBug/iBug.github.io.git" deploy
cd deploy
git rm -rf .
cd ..
mv _site/* deploy
cd deploy
git add --all
git config user.name "Travis CI"
git config user.email "[email protected]"
git commit --message "Auto deploy from Travis CI"
git remote add deploy "https://[email protected]/iBug/iBug.github.io.git" &>/dev/null
git Push deploy master &>/dev/null

次に https://github.com/settings/tokens に移動し、トークンを生成します。 public_repo権限を付与します。 Travis CIのリポジトリ設定に移動し、変数名がGH_TOKENのトークンを保存します。

デプロイスクリプトをtravisに追加します。

script: bundle exec jekyll build
after_success:
    - bash .travis/deploy.sh

これらをGitHubにプッシュすると、Travisがトリガーされます。


私のブログは ここ です。これは包括的であるため、ここに回答として投稿すると冗長になります(Stack Overflowユーザーはほとんど経験豊富な開発者であるため)。私のブログに投稿したスクリプトにも機能がありません。構築されたサイトのコミット履歴は保持されませんが、上記のこの回答のスクリプトは保持します。

0
iBug