console.lealog();

@leader22のWeb系に関する勉強めもブログですのだ

現時点のCircleCI 2.0で、GitのタグのpushでCIするには

今日(20170406)時点のCircleCI 2.0(Beta)では、1系のときに存在したこの記述が動かない。

deployment:
  release:
    tag: /release-.*/
    commands:
      - ./deploy_master.sh

公式的には、

  • ちゃんとしたのを用意する予定
    • 内部的にはチケットがある
  • とりあえずの対処法もある

らしいので、この「とりあえずの対処法」をメモ。

Git tag deploys in 2.0 - 2.0 Support - CircleCI Community Discussion

タグをフックする

`config.yml`にこう書く。

version: 2

# ...

deployment:
  fake_deploy_for_cci2: # 別に名前はなんでもいい
    tag: /.*/ # どんなタグでもフックするようにするのが重要
    command: |
      echo "現時点でtagのpushによりCIを動かすにはこうして見張るしかない"
      echo "そして実処理は別途書く必要がある"
      echo "というかたぶんココ動いてないし、ドコにログ出てるかも不明"

これでとりあえずタグがpushされた時にCIが動きます。

特定のタグでなんかする

とりあえずタグのpush時にもCIするだけならここまででOK。

ただしほとんどそんなことないはずで・・、特定のタグでなんかするをやるにはさっきのに加えてこう書く。

version: 2
jobs:
  build:
    steps:
      - deploy
        name: Deploy somthing
        command: |
          if [[ "${CIRCLE_TAG}" =~ release-.* ]]; then
            ./deploy_master.sh
          else
            echo "do nothing :)"
          fi
deployment:

てな具合いに、

  • `deployment`の指定で全部のタグを引っ掛けて
  • `deploy`の`steps`で実際の処理をする
    • そのときにタグをチェックする

っていう手間をかければできます。

Artifactsを出したい

これまた別で、`store_artifacts`っていう項目があるのでそれを使う。

version: 2
jobs:
  build:
    steps:
      - deploy
        name: Deploy somthing
        command: |
          if [[ "${CIRCLE_TAG}" =~ release-.* ]]; then
            ./deploy_master.sh # ./package になんか作る
          else
            echo "do nothing :)"
          fi
      - store_artifacts:
          path: ./package # 作っておいたもの(ディレクトリ or ファイル)
          destination: package # 必須らしいが名前はなんでもいい
deployment:

これでOK。

普段の関係ないビルドやタグの場合は、Artifactsで指定したディレクトリに何もできないはずなので、何も起こらない。

公式対応はよーー・・