LoginSignup
6
5

More than 5 years have passed since last update.

TravisCIでreleaseブランチにマージされたらPyPIに自動リリースさせる

Posted at

Travisのドキュメント読んでたらDeploymentのProviderにPyPIがあって、読んだら簡単そうだったからやってみた。

travis-cliでPyPIの認証情報を暗号化したものを.travis.ymlに書いてTravisに渡すことができるので、Publicのレポジトリであっても自動リリースできる。

作戦

  • GitHubでmasterからreleaseブランチにPR投げてマージする
  • TravisはBuild成功時にブランチがreleaseであればPyPIにリリースする

masterは開発のもっとも進んだブランチでgit-flowとかでいうdevelopブランチ。

うれしさ

マージをトリガーにした自動リリースの仕組みを整えると特定のブランチのマージ履歴がリリース履歴と同期するのでズボラなリリースフローを改善できてうれしい。

  • めんどくさいからgitでタグとかつけてらんない。Webサービスとかだとそもそもリリース多いしタグとかかったるい
  • リリースするときは思いついたように荒々しくmasterをデプロイ
  • リリースのヘッドがmasterのどこを指してるのよくかわからない
  • 問題発生した時はシックスセンスで問題が解消されるコミットに出会うまで戻しデプロイを繰り返す

実行

まずtravis-cliを導入する。

gem install travis
travis login

GitHubのユーザー名とパスワード、設定してる場合は2段階認証も聞いてくるので入力する。

以下の様な.travis.ymlがある状態で、

language: python
python:
  - '2.6'
  - '2.7'
  - '3.3'
  - '3.4'
install:
  - pip install -e . --use-mirrors
script:
  - python setup.py test
deploy:
  provider: pypi
  user: Keita
  on:
    repo: keitaoouchi/easyimap
    branch: release/pypi
    distributions: sdist --formats=gztar,zip
    python: 3.4
  allow_failure: false
notifications:
  slack:
    secure: mRFzPF4qQzRfHCS9rYEKpUI9w5wvyv4AO8AVuzvwU1rExKokdl6jcxsMEYlOvozqztfjY7YSN3hm/KV60UiPBtbuox54GrvkCu/qqfx6tFRc1aS+5JclGvOGrrRyzodCIDJEuayiZIrzUSMwcwRInd+N1atpJUKoa9AgyVn+e0o=
    on_success: change
    on_failure: change

travis encrypt --add deploy.password

を実行すると、travisがPyPIのパスワードを聞いてくるので教えてあげると、

deploy:
  provider: pypi
  user: Keita
  password:
    secure: hiKhwSky/Vj0P3d9PZZLY4zvCdpWhNOogyNhvktY11cPTtBP1mPitMr9MMeyDzhqjc1NzetQqseOvISak9yTTQ6UVL3E7si6n2gXro3NdLlE+8LlNDzV/kAsgmAj3vhzmr1YYf6bATwtxzIDkVcTVgb5WjYqRKxKADILPbY9OKk=
  on:
    repo: keitaoouchi/easyimap
    branch: release/pypi
    distributions: sdist --formats=gztar,zip
    python: 3.4
  allow_failure: false

といった感じに暗号化されたパスワードをぶち込んでくる。ちなみにdeploy:on:python: 3.4を忘れると複数バージョンのビルドごとにdeployが走ってしまうので忘れない。

あとはGitHub上でmasterからreleaseへのPRを作ってマージしてやると、このマージビルド成功時にPyPIにデプロイされる。

リリース用のPRを作ってマージして、
https://github.com/keitaoouchi/easyimap/pull/19

ビルド成功時にPyPIへのアップロードが行われて、
https://travis-ci.org/keitaoouchi/easyimap/jobs/43922642

PyPIにリリースできた。
https://pypi.python.org/pypi/easyimap/0.6.0

感想

楽だしズボラにやさしい。

6
5
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
5