Bitbucket Pipelines を使ってみたメモ書き


Bitbucket で自動実行が出来る Pipeline があるので使ってみたので、それのメモ書き。

2017/09/21現在の事なので、今後機能が増えたり変更されたりする可能性はあるかも。

see: [Build, test and deploy with Pipelines - BitBucket Support](https://confluence.atlassian.com/bitbucket/build-test-and-deploy-with-pipelines-792496469.html)

# PipeLineの特徴

1. Docker コンテナ上で指定コマンドを実行
2. 実行トリガーは、bitbucketにpushするか、スケジュール指定ができる
3. 無料プランでも使える。
	3. 実行時間に上限がある。課金で上限を上げられる。
	4. BitBucketのPipelineで動かす時間の事を「ビルド時間」と書かれている。

## プラン

クラウドの方で計算している。自社ホストタイプの場合はよくわからない。

時間はプロジェクト単位ではなく、BitBucketアカウント単位になる。一つのチームに5人いて、プロジェクトが10個あった時、チームが登録しているプロジェクトの場合は、それらのプロジェクトの実行時間はチームに加算される。

これ以上の細かいことはわからんから、Atlasianの人に聞いてくれ。

| プラン | 時間 |
| :---- | :----- |
| 無料アカウント | 50分/月 |
| アカデミック | 500分/月 |
| スタンダード | 500分/月 |
| プレミアム | 1000分/月 |


see: [Pricing bitbucket](https://ja.atlassian.com/software/bitbucket/pricing?tab=cloud)

# 機能特徴

1. Docker コンテナを指定してそのイメージ上で動かす。
	2. ただ windows はまだ未対応。頑張ってるぽい。
	3. 実行環境の上限
		4. 4GB Ram
		5. 実行時間は最長で2時間
		6. 5GBのディスクスペース
2. SSH-Key指定ができるから、外部サーバにログインして云々も可能
	3. 要はデプロイできるやで
4. 実行方法は、時間指定の定期実行と、git-pushのトリガーで実行させる二種類がある。
	5. 二種類を組み合わせることも可能。実行時間がエライことになると思うけど。
6. キャッシュ機能がある
	7. まだよく理解してない。
	8. composer とかの実行結果とか、composerそのもののを毎回入れるのは実行時間くうだけだから、一度使ったらどこかに持たせてキャッシュさせる機能ぽい。
	9. see: https://confluence.atlassian.com/bitbucket/caching-dependencies-895552876.html

# 書式

リポジトリのトップディレクトリに `bitbucket-pipelines.yml` という名前で yaml 書式のファイルを保存をする。

例えば、PHPで、gdやmysqlを使っていて、とりあえずいろんなものを使っていて、git-pushした時に自動実行する場合。

```bitbucket-pipelines.yml
image: php:7.1.1
pipelines:
  default:
    - step:
        script:
          - apt-get update && apt-get install -y unzip libfreetype6-dev libjpeg62-turbo-dev libpng12-dev
          - docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/
          - docker-php-ext-install -j$(nproc) gd
          - docker-php-ext-install mcrypt && docker-php-ext-install pdo_mysql && docker-php-ext-install zip
          - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
          - composer install
          - vendor/bin/phpunit
        services:
          - mysql
  unittest:
    - step:
        script:
          - apt-get update && apt-get install -y unzip libfreetype6-dev libjpeg62-turbo-dev libpng12-dev
          - docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/
          - docker-php-ext-install -j$(nproc) gd
          - docker-php-ext-install mcrypt && docker-php-ext-install pdo_mysql && docker-php-ext-install zip
          - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
          - composer install
          - vendor/bin/phpunit
        services:
          - mysql

definitions:
  services:
    mysql:
      image: mysql
      environment:
        MYSQL_DATABASE: 'homestead'
        MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
        MYSQL_USER: 'homestead'
        MYSQL_PASSWORD: 'secret'
```

# 時間指定

bitbucket の指定リポジトリにある `Pipelines`から設定できます。設定するには `bitbucket-pipelines.yml` の `pipelines` 以下に `default` 以外の名前でステップを書いた実行計画がないといけません。上の例の場合だと、 `unittest`だけが設定できます。

週指定の設定例。

![スクリーンショット 2017-09-21 12.44.49.png](https://qiita-image-store.s3.amazonaws.com/0/1054/9ed0b4a5-73d4-83ef-7977-1433fc4f1e04.png "スクリーンショット 2017-09-21 12.44.49.png")


ここで力尽きた、何か書きたいことができたら追記してく。

todo: workflowの事