LoginSignup
6
2

More than 5 years have passed since last update.

Travis CI でビルドが成功した場合だけ Netlify にデプロイ

Last updated at Posted at 2017-06-01

やりたいこと

  • Travis CI で Jekyll のテストをする
  • Travis CI で ビルドが成功した場合だけ Netlify でデプロイ

(追記)
ビルドが成功したあとで実行される deploy イベントで対応してるプラットフォーム(GitHub PagesやAWS S3など)にデプロイするのであればそちらを使ったほうが楽
https://docs.travis-ci.com/user/deployment/

仕様

  • デプロイする専用ブランチ release を作っておく
  • Travis CI で master ブランチのビルドが成功した場合、release ブランチにマージ push
    • 前提条件としてプルリクエストもTravis CI で ビルドが成功したものだけマージするようにしておく
  • Travis CI で release ブランチのテストは除外しておく
  • Netlify では release がデプロイされるようにしておく

ソース

SSH鍵を入れないように .gitignore に記載しておくこと

(追記)
プルリクエストの場合、 opensslコマンドが使えずエラーが起きる。
今回の場合 master ブランチでビルドが成功した場合のみ git コマンドを使うので条件分岐を追加。

.gitignore
id_rsa
id_rsa.pub
.travis.yml
language: ruby
rvm:
- 2.3.3

before_install:
  - 'if [ "$TRAVIS_BRANCH" == master ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then bash ./script/before_install.sh; fi'

before_script:
 - chmod +x ./script/cibuild # or do this locally and commit

script: ./script/cibuild

# blocklist
branches:
  except:
    - release

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

env:
  global:
    - NOKOGIRI_USE_SYSTEM_LIBRARIES=true # speeds up installation of html-proofer

sudo: false # route your build to the container-based infrastructure for a faster build
before_install.sh
#!/bin/bash

openssl aes-256-cbc -K $encrypted_xxxx_key -iv $encrypted_xxxx_iv -in travis_key.enc -out id_rsa -d
cp id_rsa ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
echo -e "Host github.com\n\tStrictHostKeyChecking no\nHost github github.com\n\tHostName github.com\n\tIdentityFile ~/.ssh/id_rsa\n\tUser git\n" >> ~/.ssh/config
git config --global user.email "example@example.com"
git config --global user.name "example user"

SSH鍵の部分などは以下を参考に

「Please add the following to your build script (before_install stage in your .travis.yml, for instance):」とあるので before_install に入れましょう。

script で実行してるのは Jekyll のテストで中身は以下を参考に。

after_success では master ブランチかつプルリクエスト以外で deploy.sh が実行されるようにしておく。

deploy.sh
#!/bin/bash

git config --replace-all remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
git config core.filemode false
git fetch
git checkout -b release origin/release
git merge origin/master
git push git@github.com:example/example.git release

git config してる理由は以下を参照に。(git fetch だけではあかんよってことです)

git config core.filemode falsebefore_script でのパーミション変更を無視するようにしてます。

GitHubの設定でmasterブランチへのマージを制限したりreleaseブランチを削除しないように保護しておくとベスト。

現場からは以上です。

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2