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"

エスケープ処理っぽいことをしてみたりもしましたが無理でした。

support github release :body · Issue #155 · travis-ci/dpl
Hey guys, Thanks for awesome tooling! Please consider adding support for :body when creating release in github. ...

改行を br に置き換えて使用することで回避できるようです。

https://guseyn.com/posts/travis-control-quality

または別のツールを使用する選択肢もあります。

lindell/github-release-cli
Contribute to lindell/github-release-cli development by creating an account on GitHub.

私は将来的に GitHub Actions でリリースの本文を生成する予定なので、Travis CIからのデプロイではファイルの作成を行うだけにとどめることにしました。

branches.only に master を設定

master だけだとタグのプッシュには反応しません。

例えば v1.2.3 のようなタグ付けをする場合、正規表現で指定することで動作しました。

"/^v[0-9\\.]+/"

暗号化

秘密にしておく必要のあるトークンなどは travis encrypt で暗号化します。

Encryption keys - Travis CI

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にプッシュすることも可能です。

検索で上位に出てきたページを参考に設定しましたが、認証がうまくいきませんでした。

Travis CI から GitHub へ git push を行う設定 | Tips Note by TAM
TAM のテクニカルチームがお届けする WEB技術ブログ!

次に参考にした記事では https から git に設定を変えていたので同じように変更してみたところ上手く通りました。

アプリ公開に伴ってStorybookとドキュメントを自動で最新化+デプロイする - Qiita
# 概要 アプリ公開時に以下の要件を満たす環境が欲しかったため、試行錯誤した際の備忘録。 * GitHubへのプッシュに伴って自動的にアプリをビルドして公開したい。 * Storybookも自動的にビルドして公開したい。 * ドキュ...

前のページでは 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/"

コメント

タイトルとURLをコピーしました