Travis CI の挙動まとめ
引っかかった点などのまとめ
deploy.provider = releases で既にリリース済みに対してデプロイを行った場合
deploy.overwrite = true を設定しておくことで上書きしてくれます。
Travis CI からのデプロイが完了する前に GitHub 上から手動 または GitHub Actions などで作成されていても問題ありません。
deploy.provider = script の場合の script に source を使用
環境変数を読みこんでからスクリプトを実行したかったので以下のように記述
script: source env.sh && bash deploy.sh
結果
Deploying application
sh: 1: source: not found
source コマンドが見つからないようです。
before_deploy で source するように修正したら動きました。
deploy に on を使わない
jobs:
include:
(省略)
- stage: deploy
(省略)
deploy:
provider: script
script: deploy.sh
# on:
# tags: true
stages のほうでステージの実行条件としてタグがある場合としていたため、ジョブのほうの指定は不要かと思いコメントアウトしました。
結果
Skipping a deployment with the script provider because this branch is not permitted: (タグ名)
on を戻したら動作しました。
タグプッシュ時の ${TRAVIS_COMMIT_RANGE}
タグプッシュ時にリリース内容を取得するために使用を試みました。
通常のマージでは
変更開始コミットハッシュ...変更終了コミットハッシュ
のようなものが取得でき、git log などと併せて使用することでコミット一覧を作成することができますが、タグプッシュ時はこの環境変数は利用できませんでした。
最終的に不要になりましたが、もし必要な場合は git の情報や GitHub API などから取得する必要があります。
deploy.provider = releases で改行を含む body を指定する
provider: releases の body に改行を含む複雑な文章を指定することはできないようです。
invalid option "--body=## What’s Changed\n* e277808 fix: commit message"
エスケープ処理っぽいことをしてみたりもしましたが無理でした。
改行を br に置き換えて使用することで回避できるようです。
または別のツールを使用する選択肢もあります。
私は将来的に GitHub Actions でリリースの本文を生成する予定なので、Travis CIからのデプロイではファイルの作成を行うだけにとどめることにしました。
branches.only に master を設定
master だけだとタグのプッシュには反応しません。
例えば v1.2.3 のようなタグ付けをする場合、正規表現で指定することで動作しました。
"/^v[0-9\\.]+/"
暗号化
秘密にしておく必要のあるトークンなどは travis encrypt で暗号化します。
travis-ci.com で使用する場合は --com をつける必要があります。
またリポジトリが正しく認識されている必要があり、明示的に指定する場合は -r を使用します。
travis encrypt --com -r <owner>/<repo> "test"
管理画面で登録した環境変数をトークンに使用
Slack のトークンは暗号化を行って
notifications:
email: false
slack:
secure: <encryped token>
のように使用します。
暗号化が面倒だったので、管理画面の設定から登録できる環境変数として SLACK_TOKEN を登録し、
notifications:
email: false
slack:
secure: ${SLACK_TOKEN}
として使用することを試しましたが、通知されませんでした。
おとなしく暗号化したものを使用すれば通知されます。
Push
Travis CI の Cron によって自動更新して、変更をGitHubにプッシュすることも可能です。
検索で上位に出てきたページを参考に設定しましたが、認証がうまくいきませんでした。
次に参考にした記事では https から git に設定を変えていたので同じように変更してみたところ上手く通りました。
前のページでは Travis CI が clone してきたのとは別に clone してからそれに対して push しており、その clone の際には確かにプロトコルが https ではなく git になっています。
https の場合は username と password が求められ、そこで自動化がうまくいかないようなので、before_install などで git プロトコルを使用するようにするとよさそうです。
git config --global url."git@github.com:".insteadOf "https://github.com/"