concourse-ciでよく使うコマンド(fly)

#concourse-ciでよく使うコマンド(fly)

## はじめに
concourse-ciで用意されている`fly`コマンドを使ってパイプラインを操作する方法を纏めています。
構築の記事は[こちら](https://qiita.com/slave125/items/38a156d4f2efd891e6e5)です。


## 環境
* Mac os x HighSierra
* fly 5.0.1

## 前準備
以下のコマンドとブラウザでログインする。

```bash:
$ fly -t tutorial login -c http://localhost:8080
logging in to team 'main'

navigate to the following URL in your browser:

  http://localhost:8080/login?fly_port=59005

or enter token manually: 
target saved
```
`tutorial`は任意のターゲット名を指定しています。
これ以降の作業は、上記でログインしていることが前提となります。

## 設定ファイル
以下の設定ファイルをベースにします。
dockerイメージを使用して、`uname -a`を実行するだけの処理です。

```yml:tutorial_pipeline.yml
jobs:
- name: job-tutorial
  plan:
  - task: uname_show
    config:
      platform: linux
      image_resource:
        type: docker-image
        source: {repository: busybox}
      run:
        path: sh
        args:
        - -c
        - |
          uname -a
```
各項目の説明はこちらにあります。
https://concourse-ci.org/jobs.html


## 登録の基本
以下のコマンドが基本となります。

```bash:
$ fly -t tutorial set-pipeline --pipeline tutorial_pipeline --config tutorial_pipeline.yml
jobs:
  job job-tutorial has been added:
+ name: job-tutorial
+ plan:
+ - task: uname_show
+   config:
+     platform: linux
+     image_resource:
+       type: docker-image
+       source:
+         repository: busybox
+     run:
+       path: sh
+       args:
+       - -c
+       - uname -a
  
apply configuration? [yN]: y
pipeline created!
you can view your pipeline here: http://localhost:8080/teams/main/pipelines/tutorial_pipeline

the pipeline is currently paused. to unpause, either:
  - run the unpause-pipeline command
  - click play next to the pipeline in the web ui
```

|引数名 |説明  |
|---|---|
|-t  |ログイン時に決めたターゲット名を指定  |
|set-pipeline  |パイプラインを登録する時のコマンド名  |
|--pipeline|パイプライン名を指定します。|
|--config|設定ファイルのパスを指定します。|

![スクリーンショット 2019-03-28 15.29.15.png](https://qiita-image-store.s3.amazonaws.com/0/42143/289e2067-c1a7-7936-285f-8338f3ec6823.png)

### 変数がある場合の登録
ログイン情報など設定ファイルに直接書き込む事が憚れる場合に、変数を設定して登録時に渡す方法があります。
下記サンプルは、変数に指定された文字を`echo`する処理です。

```yml:
jobs:
- name: job-var-tutorial
  public: true
  plan:
  - task: echo_var_show
    params:
      VAR_HOGE: ((var_hoge))
    config:
      platform: linux
      image_resource:
        type: docker-image
        source: {repository: busybox}
      run:
        path: sh
        args:
        - -c
        - |
          echo "${VAR_HOGE}"
```

```bash:
$ fly -t tutorial set-pipeline --pipeline var_pipeline --config var_pipeline.yml \
    --var "var_hoge=hogehoge"
```

|引数名 |説明  |
|---|---|
|--var  |変数名と値を指定します。複数指定できます。  |

![スクリーンショット 2019-03-28 16.11.25.png](https://qiita-image-store.s3.amazonaws.com/0/42143/19a09556-52d8-bc9d-531d-618154cfb7f9.png)

## 更新方法

登録方法と同じコマンドを実行すれば更新されます。

```bash:
$ fly -t tutorial set-pipeline --pipeline var_pipeline --config var_pipeline.yml \
--var "var_hoge=hogehoge"
jobs:
  job job-var-tutorial has changed:
  name: job-var-tutorial
  public: true
  plan:
  - task: echo_var_show
    config:
      platform: linux
      image_resource:
        type: docker-image
        source:
          repository: busybox
      run:
        path: sh
        args:
        - -c
-       - echo "${VAR_HOGE}"
+       - |-
+         echo "${VAR_HOGE}"
+         echo "${VAR_HOGE}"
    params:
      VAR_HOGE: hogehoge
  
apply configuration? [yN]: y
configuration updated
```

## 削除方法
下記コマンドを実行さすれば、削除されます。

```bash:
$ fly -t tutorial destroy-pipeline --pipeline var_pipeline
!!! this will remove all data for pipeline `var_pipeline`

are you sure? [yN]: y
`var_pipeline` deleted
```

|引数名 |説明  |
|---|---|
|-t  |ログイン時に決めたターゲット名を指定  |
|destroy-pipeline |パイプラインを削除する時のコマンド名  |
|--pipeline|パイプライン名を指定します。|

##参考

* [公式](https://concourse-ci.org/)
* [公式チュートリアル](https://concourse-ci.org/)