shareof / private-docs

0 stars 1 forks source link

Concourse CI Pre HandsOn #41

Open hogehugav opened 2 years ago

hogehugav commented 2 years ago

CI/CD Training HansOn

hogehugav commented 2 years ago

1. Hello WorldをConcourseの task.yml から出力してみよう

コマンド②: 0バイトのhello.ymlファイルを作成する

C:\Users\Developer01\Documents\handsOn>type nul > hello.yml

コマンド③: 作成を行ったhello.ymlファイルの所在を確認する

C:\Users\Developer01\Documents\handsOn>dir ドライブ C のボリューム ラベルは Local Disk です ボリューム シリアル番号は FE31-AA61 です

C:\Users\Developer01\Documents\handsOn のディレクトリ

2020/10/12 18:08

. 2020/10/12 18:08 .. 2020/10/12 18:09 0 hello.yml 1 個のファイル 0 バイト 2 個のディレクトリ 18,822,660,096 バイトの空き領域

- [ ] 3. [ hello.ymlの元データをConcourseのtutorial.gitから取得する](https://github.com/starkandwayne/concourse-tutorial/blob/master/tutorials/basic/task-hello-world/task_hello_world.yml) し、先程作成した **hello.yml** にペーストする

hello.ymlの内容
```yml
---
platform: linux

image_resource:
  type: docker-image
  source: {repository: busybox}

run:
  path: echo
  args: [hello world]
  • [ ] 4. "Hello Word"をConcourseのタスクとして実行する
    
    C:\Users\Developer01\Documents\handsOn>fly -t dev-ops e -c hello.yml
    uploading handsOn done
    executing build 2 at http://localhost:8080/builds/2
    initializing
    waiting for docker to come up...
    Pulling busybox@sha256:2ca5e69e244d2da7368f7088ea3ad0653c3ce7aaccd0b8823d11b0d5de956002...
    sha256:2ca5e69e244d2da7368f7088ea3ad0653c3ce7aaccd0b8823d11b0d5de956002: Pulling from library/busybox
    df8698476c65: Pulling fs layer
    df8698476c65: Verifying Checksum
    df8698476c65: Download complete
    df8698476c65: Pull complete
    Digest: sha256:2ca5e69e244d2da7368f7088ea3ad0653c3ce7aaccd0b8823d11b0d5de956002
    Status: Downloaded newer image for busybox@sha256:2ca5e69e244d2da7368f7088ea3ad0653c3ce7aaccd0b8823d11b0d5de956002        
    docker.io/library/busybox@sha256:2ca5e69e244d2da7368f7088ea3ad0653c3ce7aaccd0b8823d11b0d5de956002

Successfully pulled busybox@sha256:2ca5e69e244d2da7368f7088ea3ad0653c3ce7aaccd0b8823d11b0d5de956002.

selected worker: 59f334a72d94 running echo Hello World Hello World succeeded

hogehugav commented 2 years ago

2 パイプラインとしてHello World !!を出力してみよう

hello_pipeline.ymlの内容

---
jobs:
  - name: job-hello-world
    public: true
    plan:
      - task: hello-world
        config:
          platform: linux
          image_resource:
            type: docker-image
            source: {repository: busybox}
          run:
            path: echo
            args: [hello world]

apply configuration? [yN]: y pipeline created! you can view your pipeline here: http://localhost:8080/teams/main/pipelines/hello-pipeline

the pipeline is currently paused. to unpause, either:

image

image

※TIPS: しかし、このUI側でパイプラインの操作を行う方法をとるとPCのバッテリー消費などが著しく早くなってしまうため、 パイプラインのジョブが複数で構築されていない場合は fly watch コマンドでパイプラインの実行を行うほうがPCにやさしいです。

# fly -t <ターゲット> watch -j <パイプライン>/ <パイプラインの内部で定義したジョブ名>
C:\Users\Developer01\Documents\handsOn>fly -t dev-ops watch -j hello-pipeline/job-hello-world
initializing
selected worker: 59f334a72d94
running echo hello world
hello world
succeeded
hogehugav commented 2 years ago

3. get-pipelineコマンドによるパイプラインの再現性担保

hello_pipeline.ymlの編集後の内容

---
jobs:
  - name: job-hello-world
    public: true
    plan:
      - task: hello-world
        config:
          platform: linux
          image_resource:
            type: docker-image
            source: {repository: busybox}
          run:
            # echoコマンドのスペルをわざと間違えます。
            path: ech  
            args: [hello world]

apply configuration? [yN]: y configuration updated

- [ ] ジョブを起動しエラーでパイプラインが失敗することを確認します。

![image](https://user-images.githubusercontent.com/70954644/95819122-550f0000-0d60-11eb-8d6f-9ba7ba6ea73a.png)

- [ ] ここでなぜエラーになってしまったのかを再現するため、get-pipelineコマンドでhello-pipelineのymlデータを取得します。
```sh
C:\Users\Developer01\Documents\handsOn>fly -t dev-ops gp -p hello-pipeline
jobs:
- name: job-hello-world
  plan:
  - config:
      image_resource:
        source:
          repository: busybox
        type: docker-image
      platform: linux
      run:
        args:
        - hello world
        # echoコマンドのスペルミスが原因であることがわかります。
        path: ech
    task: hello-world
  public: true

apply configuration? [yN]: y configuration updated

無事にエラーが解消され、Hello Worldの出力が行えたらOKです。

![image](https://user-images.githubusercontent.com/70954644/95819750-a9ff4600-0d61-11eb-87b9-184d573009fd.png)

今回は簡単な例をあげましたが、実際の業務ではジョブが数個に及ぶケースがあるため、この再現性の担保はConcourseでパイプラインのデバッグを行う上で、非常に効力を発揮します。

- [ ] 次のpipeline.ymlにはスペルミスがあります。それをget-pipelineコマンドを使用し、修正してみてください。
ヒント:  **そんなOS存在しますでしょうか**

```YML
---
jobs:
  - name: is-exists-os-pipeline
    public: true
    plan:
      - task: hello-world
        config:
          platform: lix
          image_resource:
            type: docker-image
            source: {repository: busybox}
          run:
            path: echo
            args: [thx you`re fixed]
hogehugav commented 2 years ago

リソースのInputとOutput

実行イメージ

タスク起動時に外部ファイルであるhello-input.shをコンテナ内にコピーしタスク内でshを実行する

input-hello.ymlをhandsOnディレクトリの直下に作成します。

---
platform: linux
image_resource:
  type: docker-image
  source:
    repository: bash
inputs:
  - name: hello
run:
  path: /bin/sh
  args: ["./hello/hello-input.sh"]

hello-input.shをinput-dirディレクトリ直下に作成します。

#!/bin/bash
echo "Hello Input Shell"

input_output_pipeline.ymlの内容

---
jobs:
  - name: create-and-consume
    public: true
    plan:
      - task: make-a-file
        config:
          platform: linux
          image_resource:
            type: registry-image
            source: { repository: busybox }
          run:
            path: sh
            args:
              - -exc
              - ls -la; echo "Created a file on $(date)" > ./files/created_file
          outputs:
            - name: files
      - task: consume-the-file
        config:
          platform: linux
          image_resource:
            type: registry-image
            source: { repository: busybox }
          inputs:
            - name: files
          run:
            path: cat
            args:
              - ./files/created_file

apply configuration? [yN]: y pipeline created! you can view your pipeline here: http://localhost:8080/teams/main/pipelines/input-output-pipeline

the pipeline is currently paused. to unpause, either:

image