Edited at

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

More than 1 year has passed since last update.


やりたいこと



  • 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ブランチを削除しないように保護しておくとベスト。

現場からは以上です。