Open hogehugav opened 2 years ago
C:\Users\Developer01\Documents\> handsOn
# コマンド①: handsOnディレクトリに移動する
cd handsOn
C:\Users\Developer01\Documents\handsOn>type nul > hello.yml
C:\Users\Developer01\Documents\handsOn>dir ドライブ C のボリューム ラベルは Local Disk です ボリューム シリアル番号は FE31-AA61 です
C:\Users\Developer01\Documents\handsOn のディレクトリ
2020/10/12 18:08
- [ ] 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]
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
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]
C:\Users\Developer01\Documents\handsOn>fly -t dev-ops vp -c hello_pipeline.yml
looks good
C:\Users\Developer01\Documents\handsOn>fly -t dev-ops sp -c hello_pipeline.yml -p hello-pipeline
jobs:
job job-hello-world has been added:
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:
- [ ] Concourse.web UIへ移動し、作成したパイプラインが表示されるか確認する
+ボタン
を押下しジョブを起動します。※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
Hello 自分の名前
となるような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]
C:\Users\Developer01\Documents\handsOn>fly -t dev-ops sp -c hello_pipeline.yml -p hello-pipeline
jobs:
job job-hello-world has changed:
name: job-hello-world
plan:
- config:
image_resource:
source:
repository: busybox
type: docker-image
platform: linux
run:
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
C:\Users\Developer01\Documents\handsOn>fly -t dev-ops sp -c hello_pipeline.yml -p hello-pipeline
jobs:
job job-hello-world has changed:
name: job-hello-world
plan:
- config:
image_resource:
source:
repository: busybox
type: docker-image
platform: linux
run:
args:
- hello world
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]
実行イメージ
タスク起動時に外部ファイルである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"
[ ] タスクを実行し、コンテナ内にhelloディレクトリとしてインプットされたことを検証する
C:\Users\Developer01\Documents\handsOn>fly -t dev-ops e -c hello-input.yml -i hello=./input-dir
uploading hello done
executing build 36 at http://localhost:8080/builds/36
initializing
selected worker: 59f334a72d94
running /bin/sh ./hello/hello-input.sh
Hello Input Shell
succeeded
これでインプットについては理解できたと思いますので次はアウトプットも含めてた挙動を確認してみましょう
[ ] handsOn直下にout-dirを作成
C:\Users\Developer01\Documents\handsOn>mkdir out-dir
[ ] hello-input.ymlにoutputsプロパティを追加する
---
platform: linux
image_resource:
type: docker-image
source:
repository: bash
inputs:
- name: hello
outputs:
- name: result
run:
path: /bin/sh
args: ["./hello/hello-input.sh"]
[ ] outputsプロパティで指定したディレクトリはダウンロードされるか検証する
C:\Users\Developer01\Documents\handsOn>fly -t dev-ops e -c hello-input.yml -i hello=./input-dir -o result=./out-dir
uploading hello done
executing build 38 at http://localhost:8080/builds/38
initializing
selected worker: 59f334a72d94
running /bin/sh ./hello/hello-input.sh
Hello Input Shell
succeeded
downloading result done
以上がinputsとoutputsプロパティの挙動になります。 だいたい理解できたと思いますので、次はConcourse tutorialで提供されている実践的な例でイメージをつかみましょう
[ ] [Concourseのtutorial.gitからyml]() データを取得し、pipeline.ymlを作成する
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
C:\Users\Developer01\Documents\handsOn>fly -t dev-ops sp -c input_output_pipeline.yml -p input-output-pipeline
jobs:
job create-and-consume has been added:
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:
- [ ] webUI上にパイプラインをセットできたら、実行します。
CI/CD Training HansOn