Bitbucket Pipelinesを使ってみる

Bitbucket使ってますか?

Githubでもprivate repositoryが無限に作れるようになったので最近は使わなくなってしまったのですが、それでもまだ使ってる方は多いかと思います。

今回はBitbucketの便利機能の紹介をします。

Bitbucket Pipelines

Bitbucket Pipelinesとは、Bitbucketに統合されているCI/CDツールです。

便利なところ

  • 無課金でも使える
  • bitbucket-pipelines.ymlを書くだけで使える
  • CI/CD入門にちょうどよい
  • Slack通知ができる

つらいところ

  • bitbucket-pipelines.ymlを変更しないと動かない
    • 導入時に虚無のコミットが生まれやすい

動かしてみる

今回使うリポジトリこちら

Go言語で書かれたコードを想定しています。

Go modulesが有効になっているプロジェクトで、go testするまでです。

コード

bitbucket-pipelines.yml

各言語用にテンプレートが存在しているため、好きな言語で始めることができます。

# This is a sample build configuration for Go.
# Check our guides at https://confluence.atlassian.com/x/5Q4SMw for more examples.
# Only use spaces to indent your .yml configuration.
# -----
# You can specify a custom docker image from Docker Hub as your build environment.
image: golang:1.11

pipelines:
  default:
    - step:
        script: # Modify the commands below to build your repository.
          - PACKAGE_PATH="\${GOPATH}/src/bitbucket.org/\${BITBUCKET_REPO_OWNER}/\${BITBUCKET_REPO_SLUG}"
          - mkdir -pv "\${PACKAGE_PATH}"
          - tar -cO --exclude-vcs --exclude=bitbucket-pipelines.yml . | tar -xv -C "\${PACKAGE_PATH}"
          - cd "\${PACKAGE_PATH}"
          - go test -v

やっていることは簡単で、リポジトリからコードを落としてきて、go test -vするだけ

LT.go

package LT

func greeting() string {
        return "Hello."
}
LT_test.go
package LT

import "testing"

func TestGreeting(t *testing.T) {
        result := greeting()
        expected := "Hello, World."
        if result != expected {
                t.Errorf("greeting() failed. expect:%v, actual: %v", expected, result)
        }
        t.Logf("result is %v", result)
}

go.mod

Modulesで使用するファイルです。

今回ライブラリを使用していないため一行のみになっています。

module LT

注意

Settings/Pipelines settingsからBitbucket Pipelinesonにします。

また、Settings/Repository VariablesからGOMODULE111onにしましょう。

動かしてみる

先程のファイルをbitbucketにpushするとPipelinesが動き出します。

greeting()がHello, World.でなく、Hello.を返しているためテスト失敗しています。

以下のように変更しましょう。

package LT

func greeting() string {
        return "Hello, World."
}

commitしてpushするとまたPipelinesが動き出します。

Yay! :tada:

PS

この話は以前のLTをベースにしています!