Travis CIからgh-pagesにデプロイ

今回の目標

  • Travis CIでビルドして、ビルドの成果物をgh-pagesにpushして公開

ドキュメントだったり、ビルドの成果物などなど、自ら生成して公開するのは面倒くさい。Travis CIを使えばそんな作業を自動化できます。今回はMarkdownで書かれたこの記事をgitbookでHTMLに変換して公開します。

1. Travis CIの設定

https://travis-ci.org/profile/(プライベートレポジトリの場合はhttps://travis-ci.com/)に行きスイッチをONにします。目的のレポジトリが表示されていない場合はSync accountのボタンを押してみて下さい。

2. GitHubにdeploy keyを登録

2.1 deploy_keyを生成

$ ssh-keygen -t rsa -b 4096 -C "example@example.com" -f deploy_key -N ''
Generating public/private rsa key pair.
Your identification has been saved in deploy_key.
Your public key has been saved in deploy_key.pub.
...

https://github.com/<username>/<repository>/settings/keysに行きdeploy keyを追加します。keyには先程生成したdeploy_key.pubを入力します。Allow write accessのチェックも忘れずに。

3. Travis CIにdeploy keyを登録

3.1 Travis CLIのインストール

Travis CIのコマンドラインクライアント(CLI))をインストールします。

$ gem install travis

3.2 Travis CLIでログイン

$ travis login
...
Username: username
Password for username: passward
Successfully logged in as username!

3.3 暗号化

2.1で生成したprivate keyを暗号化します。

$ travis encrypt-file deploy_key
Detected repository as <username>/<repository>, is this correct? |yes| yes
encrypting deploy_key for <username>/<repository>
storing result as deploy_key.enc
storing secure env variables for decryption

Please add the following to your build script (before_install stage in your .travis.yml, for instance):

    openssl aes-256-cbc -K $encrypted_0975109d8020_key -iv $encrypted_0975109d8020_iv -in deploy_key.enc -out deploy_key -d

Pro Tip: You can add it automatically by running with --add.

Make sure to add deploy_key.enc to the git repository.
Make sure not to add deploy_key to the git repository.
Commit all changes to your .travis.yml.

deploy_key.encが生成され、$encrypted_XXXXXXXXXXXX_key$encrypted_XXXXXXXXXXXX_keyという環境変数がTravis CLIによってアップロードされます。 Settingsから複合に必要な環境変数が格納されているのを確認することができます。

3.4 削除

誤ってcommitしないようにここでdeploy_keydeploy_key.pubは消しておきましょう。念のため.gitignoreにも追加しておきましょう。

$ rm deploy_key deploy_key.pub
$ echo "deploy_key\ndeploy_key.pub" >> .gitignore

4. .travis.ymlの設定

4.1 復号化

3.3のログにあるように.travis.ymlbefore_installopenssl aes-256...を追加します。

before_install:
  - openssl aes-256-cbc -K $encrypted_0975109d8020_key -iv $encrypted_0975109d8020_iv -in deploy_key.enc -out deploy_key -d

4.2 ssh認証の有効化

ssh-addするときにpermissionがゆるいと怒られるのでchmodしてから追加します。 Could not open a connection to your authentication agent.と怒られるのでssh-addする前にssh-agentを開始します。

# before_install続き
  - chmod 600 deploy_key
  - eval `ssh-agent -s`
  - ssh-add deploy_key

4.3 gitのアカウント設定

Travis CIでcommitするgitのアカウントを設定します。

# before_install続き
  - git config --global user.name "Travis-CI"
  - git config --global user.email "travis-ci@example.com"

4.4 node_jsの設定

gitbookでビルドするためnode_jsを使いました。

language: node_js
node_js:
  - '6.1'
sudo: false
cache:
  directories:
    - node_modules

4.5 ビルド、デプロイの設定

branchがmasterかつpull requestではない場合のみデプロイを行います。

script:
  - npm run build
  - '[ "$TRAVIS_BRANCH" == master ] && [ "$TRAVIS_PULL_REQUEST" == "false" ] && bash ./deploy.sh'

npm run builddocs/にHTMLが生成されるので、不要なものを削除して、commitして、gh-pagesにpushします。

#!/bin/bash -eu
cd docs
rm -f deploy_key deploy_key.enc deploy.sh .travis.yml package.json
git init
git add .
git commit -m "Publishing site on `date "+%Y-%m-%d %H:%M:%S"`"
git push -f git@github.com:okwrtdsh/deploy_from_travis.git master:gh-pages

5. masterにpush

masterにpushするとgh-pages branchが作成されます。

これでhttps://<username>.github.io/<repository>/に行くとgitbookが見られます。

完成!

まとめ

今回は見せるためにpublic repositoryで行いましたが、private repositoryでも同様に自動化できます。

private repositoryでもgithub.ioは公開されるので注意して下さい。

今回作ったものはGitHubで確認することができます。

results matching ""

    No results matching ""