Code Stream 관리자나 개발자는 Code Stream 클라우드 서비스에서 Docker 트리거를 사용할 수 있습니다. Docker 트리거는 빌드 아티팩트가 생성되거나 업데이트될 때마다 독립형 CD(지속적 전달) 파이프라인을 실행합니다. Docker 트리거는 새 아티팩트 또는 업데이트된 아티팩트를 Docker Hub 저장소에 컨테이너 이미지로 푸시하는 CD 파이프라인을 실행합니다. CD 파이프라인은 자동화된 구축의 일부로 실행될 수 있습니다.

예를 들어 , 업데이트된 컨테이너 이미지를 CD 파이프라인을 통해 연속적으로 배포하려면 Docker 트리거를 사용합니다. 컨테이너 이미지가 Docker 레지스트리에 체크인되면 Docker Hub의 Webhook는 이미지가 변경된 것을 Code Stream에 알립니다. 이 알림은 CD 파이프라인에서 업데이트된 컨테이너 이미지를 사용하여 실행되도록 트리거하고 이미지를 Docker Hub 저장소에 업로드합니다.

Docker 트리거를 사용하려면 Code Stream에서 몇 가지 단계를 수행해야 합니다.

표 1. Docker 트리거를 사용하는 방법
수행할 작업... 이 작업에 대한 자세한 내용...

Docker 레지스트리 끝점을 생성합니다.

Code Stream이 파이프라인을 트리거할 수 있으려면 Docker 레지스트리 끝점이 있어야 합니다. 끝점이 없는 경우, Docker 트리거를 위한 Webhook를 추가할 때 끝점을 생성하는 옵션을 선택할 수 있습니다.

Docker 레지스트리 끝점에는 Docker Hub 저장소의 URL이 포함됩니다.

파이프라인이 실행될 때 Docker 매개 변수를 자동 삽입하는 입력 매개 변수를 파이프라인에 추가합니다.

Docker 매개 변수를 파이프라인에 삽입할 수 있습니다. 매개 변수에는 Docker 이벤트 소유자 이름, 이미지, 저장소 이름, 저장소 네임스페이스 및 태그가 포함될 수 있습니다.

CD 파이프라인에는 Docker Webhook가 파이프라인이 트리거되기 전에 파이프라인에 전달하는 입력 매개 변수를 포함합니다.

Docker Webhook를 생성합니다.

Code Stream에서 Docker Webhook를 생성하면 해당하는 Webhook가 Docker Hub에도 생성됩니다. Code Stream의 Docker Webhook는 Webhook에 포함된 URL을 통해 Docker Hub에 연결합니다.

Webhook는 서로 통신하고 Docker Hub에서 아티팩트가 생성되거나 업데이트되면 파이프라인을 트리거합니다.

Code Stream에서 Docker Webhook를 업데이트하거나 삭제하면 Docker Hub에 있는 Webhook도 업데이트되거나 삭제됩니다.

파이프라인에 Kubernetes 작업을 추가하고 구성합니다.

Docker Hub 저장소에서 아티팩트가 생성 또는 업데이트되면 파이프라인이 트리거됩니다. 그런 다음 파이프라인을 통해 Kubernetes 클러스터의 Docker 호스트에 아티팩트를 배포합니다.

작업에 로컬 YAML 정의를 추가합니다.

배포 작업에 적용하는 YAML 정의에는 Docker 컨테이너 이미지 및 배포 시 저장소에서 이미지를 풀하는 데 필요한 모든 비밀 키가 포함됩니다.

Docker Hub 저장소에 아티팩트가 생성되거나 업데이트되면 Docker Hub의 Webhook가 Code Stream의 Webhook에 이 사실을 알리고, 이 Webhook가 파이프라인을 트리거합니다. 다음과 같은 작업이 발생합니다.

  1. Docker Hub가 Webhook에 있는URL에 POST 요청을 보냅니다.
  2. Code Stream이 Docker 트리거를 실행합니다.
  3. Docker 트리거가 CD 파이프라인을 시작합니다.
  4. CD 파이프라인이 아티팩트를 Docker Hub 저장소에 푸시합니다.
  5. Code Stream이 자체 Docker Webhook를 트리거하고, 이 Webhook는 아티팩트를 사용자의 Docker 호스트에 배포하는 CD 파이프라인을 실행합니다.

이 예시에서는 Code Stream에서 Docker 끝점 및 애플리케이션을 개발 Kubernetes 클러스터에 배포하는 Docker Webhook를 생성합니다. 이러한 단계에는 Docker가 Webhook의 URL에 게시하는 페이로드 코드 예시, 사용되는 API 코드 및 보안 토큰이 있는 인증 코드가 포함됩니다.

사전 요구 사항

프로시저

  1. Docker 레지스트리 끝점을 생성합니다.
    1. 끝점을 클릭합니다.
    2. 새 끝점을 클릭합니다.
    3. 기존 프로젝트의 이름을 입력하기 시작합니다.
    4. 유형은 Docker 레지스트리로 선택합니다.
    5. 적절한 이름을 입력합니다.
    6. Docker 레지스트리 끝점이 온-프레미스 끝점이면 클라우드 프록시를 선택합니다. 끝점이 클라우드 기반 끝점이면 기본값 설정을 그대로 유지합니다.
    7. 서버 유형은 DockerHub로 선택합니다.
    8. Docker Hub 저장소의 URL을 입력합니다.
    9. 저장소에 액세스할 수 있는 이름과 암호를 입력합니다.
    Docker 레지스트리 끝점을 추가할 때 인증서를 수락하는 것이 중요합니다. 끝점에서 요구할 수 있기 때문입니다.
  2. 파이프라인 실행 시 Docker 매개 변수를 자동 삽입하는 입력 속성을 CD 파이프라인에 설정합니다.
    파이프라인에 입력 매개 변수를 추가할 때 입력 탭을 클릭하고 Gerrit, Git 또는 Docker와 같은 매개 변수 유형을 선택합니다.
  3. Docker Webhook를 생성합니다.
    1. 트리거 > Docker를 클릭합니다.
    2. Docker에 대한 새 Webhook를 클릭합니다.
    3. 프로젝트를 선택합니다.
    4. 적절한 이름을 입력합니다.
    5. Docker 레지스트리 끝점을 선택합니다.
      끝점이 아직 없으면 끝점 생성을 클릭하여 끝점을 생성합니다.
    6. Webhook가 트리거되도록 Docker 삽입 매개 변수가 있는 파이프라인을 선택합니다. 단계 2의 내용을 참조하십시오.
      사용자 지정 추가 입력 매개 변수를 사용하여 파이프라인이 구성된 경우 입력 매개 변수 목록에 매개 변수 및 값이 표시됩니다. 트리거 이벤트를 사용하여 파이프라인에 전달될 입력 매개 변수에 대한 값을 입력할 수 있습니다. 또는 값을 비워 두거나 기본값(정의된 경우)을 사용할 수도 있습니다.

      입력 탭의 매개 변수에 대한 자세한 내용은 작업을 수동으로 추가하기 전에 Code Stream에서 CICD 네이티브 빌드 계획 항목을 참조하십시오.

    7. API 토큰을 입력합니다.
      CSP API 토큰은 Code Stream에 대한 외부 API 연결에 사용자를 인증합니다. API 토큰을 가져오려면:
      1. vRealize Automation Cloud에 로그인합니다.
      2. 이름 옆에 있는 드롭다운 화살표를 클릭합니다.
      3. 내 계정을 클릭합니다.
      4. API 토큰을 클릭합니다.
      5. 토큰 생성을 클릭합니다.
        1. 토큰 이름을 입력합니다.
        2. [조직 역할] 아래에서 조직 소유자를 선택합니다.
        3. [서비스 역할] 아래에서 VMware Code Stream을 클릭하여 확장하고 Code Stream 관리자를 선택합니다.
        4. 생성을 클릭합니다.

          Token Generated 창에는 사용자가 지정한 이름과 조직의 이름이 포함된 토큰이 표시됩니다.

      6. 복사 아이콘을 클릭합니다.

        복사를 클릭하면 정확한 문자열을 캡처할 수 있고 포인터를 사용하여 문자열을 복사하는 것보다 더 안정적입니다.

    8. 구축 이미지를 입력합니다.
    9. 태그를 입력합니다.
      Docker 트리거에 대한 Webhook을 생성할 때 Code Stream과의 외부 API 연결을 위해 사용자를 인증하는 API 토큰을 제공해야 합니다.
    10. 저장을 클릭합니다.
      Docker Webhook이 사용되도록 설정된 상태로 Webhook 카드가 나타납니다. Docker Webhook 트리거 및 파이프라인 실행 없이 Docker Hub 저장소에 대한 더미 푸시를 만들려면 사용 안 함을 클릭합니다.
  4. CD 파이프라인에 Kubernetes 배포 작업을 구성합니다.
    1. Kubernetes 작업 속성에서 개발 Kubernetes 클러스터를 선택합니다.
    2. 생성 작업을 선택합니다.
    3. 페이로드 소스에 대한 로컬 정의를 선택합니다.
    4. 그런 다음 로컬 YAML 파일을 선택합니다.
      예를 들어 Docker Hub가 이 로컬 YAML 정의를 Webhook의 URL에 대한 페이로드로 게시할 수 있습니다.
      {
      "callback_url": "https://registry.hub.docker.com/u/svendowideit/testhook/hook/2141b5bi5i5b02bec211i4eeih0242eg11000a/",
      "push_data": {
      "images": [
      "27d47432a69bca5f2700e4dff7de0388ed65f9d3fb1ec645e2bc24c223dc1cc3",
      "51a9c7c1f8bb2fa19bcd09789a34e63f35abb80044bc10196e304f6634cc582c",
      "..."
      ],
      "pushed_at": 1.417566161e+09,
      "pusher": "trustedbuilder",
      "tag": "latest"
      },
      "repository": {
      "comment_count": 0,
      "date_created": 1.417494799e+09,
      "description": "",
      "dockerfile": "#\n# BUILD\u0009\u0009docker build -t svendowideit/apt-cacher .\n# RUN\u0009\u0009docker run -d -p 3142:3142 -name apt-cacher-run apt-cacher\n#\n# and then you can run containers with:\n# \u0009\u0009docker run -t -i -rm -e http_proxy http://192.168.1.2:3142/ debian bash\n#\nFROM\u0009\u0009ubuntu\n\n\nVOLUME\u0009\u0009[\/var/cache/apt-cacher-ng\]\nRUN\u0009\u0009apt-get update ; apt-get install -yq apt-cacher-ng\n\nEXPOSE \u0009\u00093142\nCMD\u0009\u0009chmod 777 /var/cache/apt-cacher-ng ; /etc/init.d/apt-cacher-ng start ; tail -f /var/log/apt-cacher-ng/*\n",
      "full_description": "Docker Hub based automated build from a GitHub repo",
      "is_official": false,
      "is_private": true,
      "is_trusted": true,
      "name": "testhook",
      "namespace": "svendowideit",
      "owner": "svendowideit",
      "repo_name": "svendowideit/testhook",
      "repo_url": "https://registry.hub.docker.com/u/svendowideit/testhook/",
      "star_count": 0,
      "status": "Active"
      }
      }
      Docker Hub에 Webhook를 생성하는 API는 https://cloud.docker.com/v2/repositories/%3CUSERNAME%3E/%3CREPOSITORY%3E/webhook_pipeline/ 양식을 사용합니다.
      JSON 코드 본문은 다음과 유사합니다.
      {
      "name": "demo_webhook",
      "webhooks": [
      {
      "name": "demo_webhook",
      "hook_url": "http://www.google.com"
      }
      ]
      }
      Docker Hub 서버로부터 이벤트를 수신하기 위해, Code Stream에서 생성한 Docker Webhook의 인증 체계는 Webhook에 대한 임의 문자열 토큰이 포함된 허용 목록 인증 메커니즘을 사용합니다. 이 인증 체계는 hook_url에 추가한 보안 토큰에 기반하여 이벤트를 필터링합니다.
      Code Stream은 구성된 보안 토큰을 사용하여 Docker Hub 서버의 모든 요청을 확인할 수 있습니다. 예: hook_url = IP:Port/pipelines/api/docker-hub-webhooks?secureToken = ""
  5. Docker Hub 저장소에 Docker 아티팩트를 생성합니다. 또는 기존 아티팩트를 업데이트합니다.
  6. 트리거가 발생했는지 확인하고 Docker Webhook의 작업을 보려면 트리거 > Docker > 작업을 클릭합니다.
    Docker 작업 탭에서 Docker Webhook 커밋 시간, 이미지, 태그 등은 볼 수 있습니다.
  7. 실행을 클릭한 후 실행 중인 파이프라인을 관찰합니다.
    파이프라인이 실행될 때 [실행 중] 상태가 표시되고, 단계 아이콘에 진행률이 표시됩니다.
  8. 실행 중인 단계를 클릭하여 파이프라인이 실행 중일 때 작업을 봅니다.
    단계 아이콘 중 하나를 클릭하면 파이프라인이 실행될 때 단계에서 각 작업의 상태를 관찰할 수 있습니다.

결과

축하합니다! CD 파이프라인을 계속 실행하도록 Docker 트리거를 설정했습니다. 이제 파이프라인에서 신규 및 업데이트된 Docker 아티팩트를 Docker Hub 저장소에 업로드할 수 있습니다.

다음에 수행할 작업

새로 추가되거나 업데이트된 아티팩트가 개발 Kubernetes 클러스터의 Docker 호스트에 배포되었는지 확인합니다.