Concourse용 Hello World 리소스 유형 생성

콘코스란?



Concourse is an open-source continuous thing-doer.



Concourse는 간단한 YAML 파일로 구성 가능한 CI/CD 도구입니다.

연습


전제 조건



Fly & Concourse를 설치하려면 https://concourse-ci.org/의 단계를 따르십시오.
Concourse를 처음 확인하는 경우 게시한 자습서 및 문서를 검토하는 것이 좋습니다.

기본 리소스 유형 탐색



또는 (fork my repo)[ https://github.com/thehandsomezebra/concourse-resourcetype-helloworld ]를 사용하여 따라할 수 있습니다.

콩코스resource_type는 최소 4개의 파일을 사용하여 잘 작동합니다.

+-- resource
|   +-- check
|   +-- in
|   +-- out
+-- Dockerfile


각 스크립트는 실행 결과를 json 적절한 형식으로 출력해야 합니다.

높은 수준에서 각 파일을 살펴보고 모든 것을 설정해 봅시다!


확인하다



검사 파일은 새 버전을 검사할 것입니다.

확인 스크립트는 Hello World 메시지를 다시 보고합니다.

#!/bin/bash
set -eu
set -o pipefail
echo '[{ "revision": "N/A",  "message": "The check script says Hello World!" }]'



안에



이것은 주어진 리소스를 가져옵니다.

In 스크립트의 경우 일부 메타데이터를 추가해 보겠습니다. 이 메타데이터는 파이프라인의 일부 위치에서 볼 수 있습니다.

#!/bin/bash
set -eu
set -o pipefail
echo '{ "version": { "revision": "N/A", "message": "The in script version message says Hello World" }, "metadata": [{ "name": "message", "value": "The in script metadata message says Hello World." }] }'




밖으로



Out 스크립트의 경우 조금 더 복잡해집니다. 우리는 파이프라인에서 변수greeting를 가져와 에코 아웃하겠습니다.
jq를 사용하여 파이프라인을 통해 전달되는 매개변수에서 가져올 것입니다.

#!/bin/bash
echo '{ "version": { "revision": "N/A", "message": "The out script version message says Hello World" }, "metadata": [{ "name": "message", "value": "The out script metadata message says Hello World." }] }'

set -e -u

exec 3>&1 # make stdout available as fd 3 for the result
exec 1>&2 # redirect all output to stderr for logging

echo "Echo says hi from the out script!" >&2

source=$1

if [[ -z "$source" ]]; then
  echo "usage: $0 <path/to/source>"
  exit 1
fi

# for jq
PATH=/usr/local/bin:$PATH

export TMPDIR=${TMPDIR:-/tmp/rclone}
mkdir -p "${TMPDIR}"

payload=$(mktemp "$TMPDIR/resource-request.XXXXXX")
cat > "$payload" <&0

greeting=$(jq -r '.params.greeting // ""' < "$payload")
echo "Param greeting says: $greeting" >&2



도커파일



이 Dockerfile은 짧고 간단합니다.
  • 작은 Alpine Linux 인스턴스를 가동합니다
  • .
  • bash 및 jq의 로드
  • 스크립트 파일을/opt/resource 폴더에 추가합니다
  • .
  • 해당 파일을 실행 가능하게 만듭니다
  • .
  • 루트에서 bash를 실행하도록 지정합니다.

  • FROM alpine:3.13
    
    RUN apk add --update --upgrade --no-cache bash
    
    RUN apk update \
        && apk upgrade \
        && apk add --update bash curl unzip jq
    
    ADD resource/ /opt/resource/
    RUN chmod +x /opt/resource/*
    
    WORKDIR /
    ENTRYPOINT ["/bin/bash"]
    



    실행하기 위한 마지막 파일: 파이프라인 yaml 파일



    이 파일은 도커에 있을 필요는 없지만 내 저장소에 포함되어 있으므로 따라갈 수 있습니다.

    hello-pipeline.yml이라는 파일을 만듭니다.

    resource_types:
    - name: helloworld
      type: docker-image
      source:
        # set repo of your helloworld resource
        #repository: Your-Docker-Acct/Your-Docker-Repository
        ## or use my helloworld resource
        repository: thehandsomezebra/concourse-test
    
    resources:
    - name: helloworld
      type: helloworld
    
    jobs:
    - name: hello-job
      plan:
      - get: helloworld
      - put: put-helloworld
        resource: helloworld
        inputs:
             - helloworld
        params:
          greeting: "Hey y'all!"
    


    이것은 get input out 가 될 hello-job이라는 새로운 파이프라인을 생성할 것입니다.

    실행하기



    위의 단계에 따라 github 저장소( or fork mine )를 만들고 도커 허브 저장소를 만듭니다. github 저장소를 도커에 연결하고 자동 빌드로 설정하는 것도 빠릅니다( learn more about that here )).

    Docker Hub에서 리포지토리가 준비되면 이 라인을 사용하여 콩코스 파이프라인을 시작하겠습니다.

    Hello World 파이프라인을 시작하겠습니다!
    터미널에서 다음을 실행합니다.

    fly -t ci set-pipeline -c hello-pipeline.yml -p hello-world
    

    ci는 대상의 이름입니다(튜토리얼을 따랐다면 이름이 tutorial 또는 example일 수 있음)

    파이프라인 다이어그램을 보면 파선(종속성 - 트리거)이 있는 상자에서 check 단계의 결과도 볼 수 있습니다.



    작업을 확인하면 각 단계에서 메시지를 볼 수 있습니다.



    콩코스에 대한 고유한 리소스 유형을 생성할 수 있는 작업이 많이 있습니다. check out the Resource Types catalog , contribute to the community 에서 지원을 받고(또는 이미 답변된 질문을 통해 잠복) Discord in the #resource-types channel .

    참고: 저는 Concourse와 관련이 없습니다. 저는 계속해서 일을 계속하는 일에 매료된 괴짜일 뿐입니다.


    출처:


  • https://concourse-ci.org/implementing-resource-types.html
  • https://github.com/concourse/resource-types/blob/master/README.md
  • https://github.com/concourse/concourse/wiki/Tutorials
  • 좋은 웹페이지 즐겨찾기