ラベル Semaphore CI の投稿を表示しています。 すべての投稿を表示
ラベル Semaphore CI の投稿を表示しています。 すべての投稿を表示

2018年3月19日月曜日

[CI] 各種 CI サービスのビルドスキップコメントまとめ (2018/3)

CIサービスの自動ビルドをスキップする方法まとめ - Qiita
こちらに Travis CI、Circle CI、Appveyor の場合がまとまっていますが、この記事では私が利用している CI サービスすべてをまとめたいと思います。

[ci skip] vs [skip ci]
CI サービスでスキップするためのコミットコメントの定番が [ci skip] と [skip ci] です。どちらにも対応しているサービスもあれば、片方だけだったり、これに加えて独自のメッセージに対応していたりします。

iutest では全部で10以上のサービスを利用しているので、すべてのサービスで共通して使えるコメントでないと困るので今回のまとめに至りました。
また、特定のサービスだけスキップしたいなどの要求もあるかもしれないので、そういった場合にも役立つまとめになっているかと思います。

前置きはこれくらいにして、まとめを見ていきましょう。
まとめ
サービス[ci skip][skip ci]その他ユーザー定義
Travis CI
Circle CI
AppVeyor[skip appveyor]
wercker
Shippable
Codeship--skip-ci,--ci-skip
Semaphore
Codefresh
Bitrise
Scrutinizer[skip Scrutinizer]
Rocro(INSPECODE)

以前は、[ci skip] 派と [skip ci] 派が分かれていたのですが、
現在は [ci skip]/[skip ci] どちらも使える派が主流のようです。
Rocro はスキップできないみたいですね。


ユーザー定義も可能な AppVeyor
AppVeyor ではユーザーが任意のスキップコメントをつけることもできます。
https://www.appveyor.com/docs/how-to/filtering-commits/#skip-commits

やり方は appveyor.yml に以下を追加するだけです。

skip_commits:
  message: /\[no appveyor\]/

これを設定しておけば、AppVeyor だけスキップするような使い方ができます。

自分ですべて設定する Codefresh
https://docs.codefresh.io/docs/build-1
Codefresh にはデフォルトでスキップコメント機能はついていませんでした。
ただ、上記リンクのようにコンディションに書けば対応が可能でした。

steps:
  BuildingDockerImage:
    title: Building Docker Image
    type: build
    image_name: srzzumix/ciskip
    working_directory: ./
    dockerfile:
      content: |-
        FROM ubuntu:latest
        COPY . /usr/src/myapp
        WORKDIR /usr/src/myapp
    tag: '${{CF_BRANCH_TAG_NORMALIZED}}'
    when:
      condition:
        all:
          noSkipCiInCommitMessage: |
            includes(lower("${{CF_COMMIT_MESSAGE}}"), "[ci skip]") == false && includes(lower("${{CF_COMMIT_MESSAGE}}"), "[skip ci]") == false

注意が必要なのは、スキップ設定はすべてのステップに記述しないといけない点です。
(前のステップがスキップされても、後続のステップはスキップされないです。前のステップに依存しているとビルドが失敗します。)

また、スキップしたと言ってもビルド回数はカウントアップされます。。。(フリーアカウントの場合ビルド回数制限があるので気をつけましょう)

Only the head/last commit message is checked!
Bitrise のドキュメントに以下の注意書きがありました。
Only the head/last commit message is checked!
If you push more than one commit,
only the last ("head") commit's message will be checked for the skip ci pattern!
http://devcenter.bitrise.io/tips-and-tricks/skip-a-build/

複数のコミットをまとめて push した場合、コメントは最後のコミットのものしかチェックしないようです。つまり、途中のコミットにスキップコメントを入れてもスキップされないということです。

他のサービスではどうなのか調べてみたところ、(Travis CI を除く)他のサービスも同様の挙動をしてました。

Travis CI は全部にスキップコメントが必要
Travis CI は push したときの head だけでなく、commit 毎にビルドが実行されるようなので、全部のコミットにスキップメッセージを入れないとイケナイようです。
「Auto cancel branch builds」設定ができるようになりましたが、これは新しいビルドがキューイングされたらキャンセルする機能です。
スキップコメントの commit はキューイングされないため自動キャンセルもされません。

なので、Travis CI を使う場合は [ci skip] をスキップしたいコミットにつける必要があります。

Travis CI は、スキップしたいコミットに [ci skip] をつける。
それ以外は、スキップしたいコミットを含む push を行う場合は head のコミットに [ci skip] をつける。
ということになるので、Travis CI の方が直感的かもしれませんね。

最後に
今回調べたことは、こちらのリポジトリで検証・記録として見ることができます。
https://github.com/srz-zumix/ci-skip

他に試して欲しい CI サービスなどありましたら、連絡もしくは PR ください。
では。

2017年3月28日火曜日

[自動化] ニコニコ静画で削除されたクリップを通知

クリップしたものの削除されてしまった投稿は、クリップから削除するようにしているが、全クリップ・全ページを目視するのは面倒なので、自動化しました。

環境は Semaphore + Python + BeautifulSoup で、ソースコードはこちらです。
https://github.com/srz-zumix/niconico-seiga

Semaphore では定期実行が可能なので、こちらを利用しました。
毎日チェックして削除された投稿があるとメール通知が飛んできます。


自動削除までやったらもっと楽になりますが、
これでも、どのクリップのどのページの投稿が消えたかすぐわかるので、随分楽になります。
自動化素晴らしい!
今回は以上です。では。

2017年3月21日火曜日

[CI] Semaphore 始めました

Semaphore は、既に2016年の3月から使っていたのですが、ブログにしてませんでした。

(いつのまにか変なおっさんが・・・)

ブログズミ: 無料で使える CI サービス比較」などで紹介したこともありますが、その当時はまだ使ってませんでした。
現在は iutest に対して clang analysis (scan-build) を行う CI として利用しています。
また、定期実行ができ Bitbucket 連携、private も Free プラン内で利用可能な点から他のことでも便利に使わせてもらっています。
今回はサインアップから概要程度の内容ですが、その辺の話もそのうち紹介したいと思ってます。

Semaphore
これまでに様々な CI サービスを紹介してきましたが、
Semaphore は Circle CI と同等の速さ(Travis や Codesihp よりは速い)と並列実行、シンプルが売りらしいです。
(シンプルだとは思ってるけど、速さとかは気にしたことないので実感ないなぁ)
個人的に便利だと思っているのは前述した、定期実行と Free プランで private リポジトリも扱える点です。


Pricing
さて、その Pricing ですが、基本的には有料です。
ただし、OSS であれば Free (2並列まで) で使えます(よくあるパターンですね)。また、Private リポジトリでも 100 job/月 までなら Free で使えます。

アカウント作成~プロジェクト作成
Semaphore は他の CI サービスと違い、Github などの外部アカウントでのサインアップがありません。
トップページの右サイドのところから、アカウント名、メールアドレス、パスワードを入力して、「Create Free Account」をクリックします。



入力したメールアドレスにメールが送られてくるので、
そちらのリンクを開いたら登録完了です。




つづいて、プロジェクトを作成していきます。
最初に Github か Bitbucket かを聞かれるので、選択してください。
初回はアカウント連携をする必要があると思いますので、適宜対応してください。


次にリポジトリを選択。


ブランチを選択。


リポジトリの解析が始まるので終わるまで待ちます。


解析が終わるとプロジェクトの作成が完了です。
あとは、何をさせるかを設定していきましょう。


設定に関しては特に説明するようなこともないので、省かせて頂きます。

最後に
Semaphore はシンプルに使えていいなぁーって感じくらいで、今回の紹介ではあんまり良さは伝わらないんじゃないかなと思います。
ただ、冒頭でも書いたとおり、Bitbucket + private が無料プランでデキルのが一番のメリットではないかと思います。
このへんも紹介したいところですが、まだまだ作業中な状態なので、もうちょっとお待ちください。定期実行の活用例は近いうちに紹介できると思います。

では。今回は以上です。









2016年10月5日水曜日

無料で使える CI サービス比較(定期実行編)

SCM との連携で更新タイミングで CI が実行されるサービスがほとんどですが、ちょっと定期的に実行させたいことがあり調べたのでまとめました。

以前まとめた情報はこちら
※まとめた時期が結構前なのでもう腐った情報になってるかもしれませんので注意!
ブログズミ: 無料で使える CI サービス比較
ブログズミ: 無料で使える CI サービス比較(Artifacts)

AppVeyorCircle CICodeshipdrone.ioMagnum CIsemaphoreShippableSnap CITravis CIWercker
定期実行 × ×

Appveyor
Build configuration - AppVeyor
Syntax はこちら Crontab Expression · atifaziz/NCrontab Wiki
Jenkins と同じ感じです。


Circle CI
Circle CI では定期実行する仕組みはありませんが、外部から実行開始することができます。
Nightly Builds - CircleCI
なので、何かしらの cron サービスと組み合わせれば定期実行は可能というわけです。

実際に定期実行させた例が Qiita にありました。

Codeship
API | Codeship Documentation
API が用意されていて、リスタートはできそうなのですが、新規に実行する方法が?だったので×にしました。

Magnum CI
Circle CI と同様に外部から実行開始できるので △ にしました。
https://magnum-ci.com/docs/integration

Semaphore
Project Settings に Build Scheduler があります。
Scheduling builds - Semaphore


Shippable
API を利用して外部から実行開始できるので △ にしました。
Shippable API for Projects - Shippable Docs

Snap CI
Scheduling and skipping builds | Snap CI Documentation, FAQ, and Troubleshooting
プロジェクトのページに「Build Schedule」があるので、そこから設定できます。



Travis CI
Cron Jobs - Travis CI
Please note that cron jobs are not enabled by default. Set “Build pushes” to on in your settings, then ask us to unlock this feature for your repository: support@travis-ci.com
デフォルトでは使えません。サポートチームに連絡する必要があるようです。

Wercker
Introducing Cronetes
こちらにやり方が書いてあります。が、ちょっと面倒くさそう。

最後に
ここで×としたサービスもただ単に機能を見逃しているだけで使えるかもしれません。
また、この情報記事投稿前の情報です。今後サービスは拡充していくと思いますので、公式ページで最新の情報を確認するようにお願いします。


さて、これで一旦調べ終わったので、どこかで定期実行ジョブを作りたいと思います。
では、今回は以上。

2016年4月4日月曜日

無料で使える CI サービス比較(Artifacts)

この記事は「ブログズミ: 無料で使える CI サービス比較」の追加記事です。
iutest の開発の都合で成果物を保存できるサービスを調べたので備忘録として残しておきます。

AppVeyorCircle CICodeshipdrone.ioMagnum CIsemaphoreShippableSnap CITravis CIWercker
Artifacts × × × × × ×

今回◯印をつけているのは、CI サービスのみで成果物保存が可能なものにつけています。
×のサービスでも Amazon S3 などを利用すれば成果物を保存することができます。

調べたものの結局使ってないので
短いですが、以上です。

2016年1月18日月曜日

無料で使える CI サービス比較

完全に個人的な備忘録です。
こちらは 2015年11月 に調べた情報をもとに書いています。
間違いや古い情報が含まれている可能性があります。
承知のうえで見てください。


2016/9/3 追記:

CircleCI now supports Bitbucket
Circle CI が Bitbucket に対応しました。他のサービスも更新されていることが予想されます。
本家ページで最新の情報をご確認ください。



はじめに
最近 CI ネタをよく投稿していましたので、このへんで iutest のテスト用に使っている(使おうと思っている)CI サービスの比較をまとめてみました。


参考にしたところ:

はじめに
今回比較するサービスは以下の10個。(アルファベット順)
AppVeyorCircle CICodeshipDrone.ioMagnum CIsemaphoreShippableSnap CITravis-CIWercker
サポート言語
まずはサポート言語を比較します。

AppVeyorCircle CICodeshipdrone.ioMagnum CIsemaphoreShippableSnap CITravis CIWercker
サポート言語 - Ruby
/Rails
Python
Node.js
PHP
Java
Haskell
Scala
Dart
Go
Java
JVM※1
Node.js
PHP
Python
Ruby
C/C++
Dart
Go
Haskell
Groovy
Java
Node.js
PHP
Python
Ruby
Scala
Ruby
Node.js
Go
PHP
C/C++
Clojure
Elixir
Erlang
Go
Java
JavaScript
PHP
Python
Ruby
Scala
Clojure
Go
Java
Node.js
PHP
Python
Ruby
Scala
Ruby
/JRuby
Python
Node.js
/io.js
PHP
Java
Groovy
/Gradle
Scala
/SBT
Clojure
/Leiningen
C/C++
Android
C/C++
Clojure
C#
D
Dart
Erlang
F#
Go
Groovy
Haskell
Haxe
Java
JavaScript※2
Julia
Objective-C
Perl
PHP
Python
R
Ruby
Rust
Scala
Smalltalk
Visual Basic
Golang
Node.js
Python
Ruby
g++4.8.1※34.6.44.8.44.6.34.6.34.8.44.6.34.4.74.6.34.6.3
clang++-3.0-3.0--3.0-3.4-
※1:JVM based languages
※2:JavaScript(with Node.js)
※3:MinGW

こちらはあくまでも公式がサポートしていると謳っている言語で、どこまで何ができるかはそれぞれ違うので注意。
また、ここに載っていない言語でも基本的には環境をセットアップする処理を書けば、CI 可能だと思います。

自分の場合 C++ で書かれたプログラムの CI で利用しているので、素もしくは C++ 環境で実行したときにインストールされている g++ と clang++ のバージョンを載せておきます。

リポジトリホスティングサービス連携
AppVeyorCircle CICodeshipdrone.ioMagnum CIsemaphoreShippableSnap CITravis CIWercker
Github
Bitbucket×××
その他
  • VS Online
  • Kiln
  • GitHub Enterprise
  • Stash
  • Google Code
  • GitLab
  • Beanstalk
  • GitLab
    ※1
Github PR 対応×
private リポジトリ×5×××
Self Hosted
Git×××※1××××
Mercurial××××××××
Subversion××××××××
※1: GitLab and self-hosted git repositories is coming soon.

次はリポジトリホスティングサービス連携です。
Github はどのサービスも対応しています。Bitbucket は対応していないサービスが少しあります。
Github PR 対応は、pull request に対しての CI が実行されるかどうかです。
(drone.io は頑張ればできるらしい。)

Self Hosted は Github や Bitbucket などのホスティングサービス以外に、自前のサーバーなどに立てた Git リポジトリなどを使用できるかどうかです。
これに対応しているところはほとんどありませんでした。(調べきれてないだけで使えるかもしれないが…)

プロジェクト設定/ビルド関係

AppVeyorCircle CICodeshipdrone.ioMagnum CIsemaphoreShippableSnap CITravis CIWercker
YAML 設定××××
WebUI 設定×××
Branch Filter××
手動リビルド※1※1
複数環境ビルド※2××××××
private ビルド※3×100/月××
時間制限60分120分180分15分30分60分120分120分120分25分
時間制限(無出力)60分10分10分15分30分60分120分15分10分5分
※1: 最新コミットのみ
※2: コンテナを複数使うことで可能。ブログズミ: Circle CI 始めました
※3: Free and Open Source 設定だと使えない。

次は設定やビルド環境です。
CI サービスのほとんどが、YAML か WebUI で設定をします。目的に合わせて、お好きな方を選んでください。

Branch Filter は任意のブランチを CI 対象 or 除外できるかどうかという点で○×を付けてますが、それぞれサービスごとにできることが違うので注意。どういう形式なのかドキュメントで確認してください。

private ビルドはビルド結果などが他者から見えないようにできるかどうかです。

最後は時間制限です。時間制限はサービスごとに大きく差が出る結果になりました。
また、ログが一定時間出力されないとタイムアウトするサービスもあります。
先週のブログ「Snap CI 始めました」にも書きましたが、Snap CI はステージごとの時間制限なので複数ステージにすることで、より長く使うことができるので、この点においては最強です。

Notifications
AppVeyorCircle CICodeshipdrone.ioMagnum CIsemaphoreShippableSnap CITravis CIWercker
Badge
E-mail
Github commit status××
WebHook×※1
Campfire××※1
Flowdock××××※1
Grove××××××××※1
HipChat×
Pushover××××××××※1
Sqwiggle××××××××※1
Slack×
IRC×××××※1
VSO Team Room××××××××※1
CCTray××××××××
Chrome Extension×××××××××
※1: Custom step を使うことで可能 (https://app.wercker.com/#explore/steps/search/notify)

最後は通知。バッジやメールはどこでもあります。
Github commit status は CI 結果をコミットステータスとして送る機能です。
pull request のコミットにこんな感じにつきます。


他の通知として、それぞれチャットなどに対応しています。
たいていの CI サービスが WebHook が使えるので、対応していない通知でもちょっと頑張れば対応できます。
(試してはないです。)

まとめ
今回紹介した CI サービスは(semaphore 以外)すべて利用しています。それぞれ別の目的(テストや検証)のために使っているのでどれも必要ではありあすが、強いてオススメをあげるとしたら Travis CI、AppVeyor、Shanp CI でしょうか。
Travis CI はかなり有名ですので言うまでもないかなと、
AppVeyor は Windows での貴重な CI 環境ですので、欠かせません。最近、知名度が上がっているようにも感じてます。Windows 環境の CI だと Visual Studio Team Service (Visual Studio Online) もありますが、無料枠だと時間制限がキツイのと、しばらくログインしていないとビルドを実行してくれないのがメンドクサイです。
Snap CI は最近使い始めたばかりですが、便利に使えそうな印象でした。

Shippable や Wercker も便利で iutest の CI 環境としては欠かせないのですが、
(iutest では python で wandbox api を叩いて、gcc/clang の各種バージョン対応のチェックをしている。)
C++ の CI 環境としては言語サポートされていない点もあり、少し手間かなと思います。

最後に
今回は自分が使っているものを自分目線でまとめました。なので、間違ってる部分もあると思いますし、デプロイや Docker 関係など触れていない部分もあります。
もし、こちらの記事を参考にされて CI サービスを始める時は、求める機能や条件が整っているか改めて公式ドキュメントなどを確認してください。

また、間違いなどありましたらドシドシ指摘していただけると助かります。
以上。