1. 사전조건
fly를 사용할 수 있어야 하고 PATH에 걸려있어야 함.
wget https://github.com/concourse/concourse/releases/download/v5.6.0/fly-5.6.0-linux-amd64.tgz
2. 로그인 설정
2.1. ID/PW 방식
$ fly --target helloworld login --concourse-url http://127.0.0.1:8080 -u test -p test logging in to team 'main' target saved
로그인 설정을 하고 나면 홈 디렉토리에 flyrc라는 파일이 생성(혹은 내용 추가)된다.
$ cat ~/.flyrc targets: helloworld: api: http://127.0.0.1:8080 team: main token: type: Bearer value: abcd..
2.2. Token 방식
$ fly -t mytest login -c http://127.0.0.1:8080 logging in to team 'main' navigate to the following URL in your browser: http://127.0.0.1:8080/login?fly_port=43985 or enter token manually:
그리고 위에서 말한대로 http://127.0.0.1:8080/login?fly_port=43985
(IP 주소는 실제 접속 주소로 수정 필요) 에서 Token 값 얻어서 붙여넣으면 2.1과 동일하게 target 생성된다.
or enter token manually: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IiIsInR5cCI6IkpXVCJ9.eyJjc3JmIjoiZWMxOGZiOTU0ZmNhZmJhZjY4YjEwYjQ2YTMyYTZlZDQxMGVlNDJkMmNmYmU5M2M1ZTI5ZTMyNzk2NDEyZTU5ZCIsImVtYWlsIjoidGVzdCIsImV4cCI6MTU3MjU3NTQ2NiwiaXNfYWRtaW4iOnRydWUsIm5hbWUiOiIiLCJzdWIiOiJDZ1IwWlhOMEVnVnNiMk5oYkEiLCJ0ZWFtcyI6eyJtYWluIjpbIm93bmVyIl19LCJ1c2VyX2lkIjoidGVzdCIsInVzZXJfbmFtZSI6InRlc3QifQ.EhDOe7CYo5rU_tRpnxDvipDr3QsBEKbiqv_phvCcwvb8XYEIbFWY6Dfj19X1kf3fezp-Lz1Y-OtW9Ang9x7PhAMhFd3ZJf5NbVQolezGU9Kl87OqbprmXyxs1bra5vEtO0djpzQDKynBmYejxh3EpCgrtLgDncwMoPPvRIdYwgLG681n1nKL9H_tiI_f9Qc43r6TcHoMXurIG2dnhmH4umamOpBqS3LImWeamuumR3676jSHuwFyY_V1g_Ho4U0fZww1ql3qAeReXeT-i4b1EFQT0iSxuRw3qJkGsUeVpDdd-SsZQiXSz_pH6K-sVcS9_T8QuESjV56q13LTsW_6zQ target saved
3. Task 실행
두가지 종류의 Task를 만들어보려고 한다.
- hello world를 찍는 Task
- ps -ef 결과를 보여주는 Task
3.1. Hello World
다음 파일을 task-hello-world.yml
이라고 하자.
--- platform: linux image_resource: type: docker-image source: {repository: busybox} run: path: echo args: [hello world]
Task를 실행한다.
$ fly -t helloworld execute -c task-hello-world.yml uploading helloworld done executing build 1 at http://127.0.0.1:8080/builds/1 initializing waiting for docker to come up... Pulling busybox@sha256:dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808... sha256:dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808: Pulling from library/busybox 7c9d20b9b6cd: Pulling fs layer 7c9d20b9b6cd: Download complete 7c9d20b9b6cd: Pull complete Digest: sha256:dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808 Status: Downloaded newer image for busybox@sha256:dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808 Successfully pulled busybox@sha256:dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808. running echo hello world hello world
Concourse 화면의 /builds/1로도 확인 가능하다.
3.2. ps -ef Task
다음은 task-ps-ef.yml
이다.
$ cat task-ps-ef.yml --- platform: linux image_resource: type: docker-image source: {repository: ubuntu} run: path: ps args: [-ef]
Task를 실행한다.
$ fly -t helloworld execute -c task-ps-ef.yml uploading helloworld done executing build 3 at http://127.0.0.1:8080/builds/3 initializing running ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 07:31 ? 00:00:00 /tmp/garden-init root 6 0 0 07:31 pts/0 00:00:00 ps -ef succeeded
4. Jobs (Input/Output)
4.1. Helloworld
helloworld.yml
--- jobs: - name: test plan: - task: simple-task params: message: Hello World config: platform: linux params: message: image_resource: type: registry-image source: {repository: busybox} run: path: sh args: - "-c" - | echo $message
Pipeline을 생성한다.
$ fly -t mytest set-pipeline -p helloworld -c ./helloworld.yml jobs: job test has been added: + name: test + plan: + - config: + container_limits: {} + image_resource: + source: + repository: busybox + type: registry-image + params: + message: "" + platform: linux + run: + args: + - -c + - | + echo $message + path: sh + params: + message: Hello World + task: simple-task apply configuration? [yN]: y pipeline created! you can view your pipeline here: http://127.0.0.1:8080/teams/main/pipelines/helloworld the pipeline is currently paused. to unpause, either: - run the unpause-pipeline command: fly -t mytest unpause-pipeline -p helloworld - click play next to the pipeline in the web ui
실행결과다.
preparing build checking pipeline is not paused checking job is not paused waiting for a suitable set of input versions checking max-in-flight is not reached simple-task fetching busybox@sha256:679b1c1058c1f2dc59a3ee70eed986a88811c0205c8ceea57cec5f22d2c3fbb1 0f8c40e1270f [======================================] 743.2KiB/743.2KiB Hello World
4.2. create-and-consume
파일을 보내는 실습이다.
다음 파일을 jobs-create-and-consume.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
fly 명령어를 실행한다. 앞 실습과 달리 set-pipeline
을 사용한다.
$ fly -t helloworld set-pipeline -c jobs-create-and-consume.yml -p create-and-consume jobs: job create-and-consume has been added: + name: create-and-consume + plan: + - config: + container_limits: {} + image_resource: + source: + repository: busybox + type: registry-image + outputs: + - name: files + platform: linux + run: + args: + - -exc + - ls -la; echo "Created a file on $(date)" > ./files/created_file + path: sh + task: make-a-file + - config: + container_limits: {} + image_resource: + source: + repository: busybox + type: registry-image + inputs: + - name: files + platform: linux + run: + args: + - ./files/created_file + path: cat + task: consume-the-file + public: true apply configuration? [yN]: y pipeline created! you can view your pipeline here: http://127.0.0.1:8080/teams/main/pipelines/create-and-consume the pipeline is currently paused. to unpause, either: - run the unpause-pipeline command: fly -t helloworld unpause-pipeline -p create-and-consume - click play next to the pipeline in the web ui
위에서 알려준대로 Concourse UI에 들어가보자.
그리고 다음과 같이 실행되었다.
4.3. ps-ef-input
ps -ef 정보를 보내는 실습이다.
다음 파일을 jobs-ps-ef-input.yml
이라고 하자.
--- jobs: - name: ps-ef-input public: true plan: - task: make-a-file config: platform: linux image_resource: type: registry-image source: { repository: ubuntu } run: path: sh args: - -exc - ps -ef > ./files/result_ps_ef_input outputs: - name: files - task: consume-the-file config: platform: linux image_resource: type: registry-image source: { repository: ubuntu } inputs: - name: files run: path: cat args: - ./files/result_ps_ef_input
fly -t helloworld set-pipeline -c jobs-ps-ef-input.yml -p ps-ef-input
을 실행하여 파이프라인을 생성한다.