cron 작업을 기반으로 Cloudflare 빌드 예약

9163 단어 cloud
내 웹 사이트용 스크립트를 구축한 배경을 설명하는 것으로 시작하겠습니다.

나는 이 블로그를 위해 다양한 빌드 시스템을 사용해 왔으며, 어떻게든 그들은 항상 개선되고 더 쉬워질 수 있는 것 같습니다.

이 블로그 빌드 시스템의 역사:
  • 수동 빌드 및 업로드
  • Netlify 빌드를 트리거하는 IFTT 후크
  • GitHub 작업 빌드 및 Netlify에 업로드 단계
  • GitHub 작업 cron 및 Netlify에 업로드
  • Cloudflare에 GitHub cron 업로드

  • 그리고 최신:
  • Cron의 Cloudflare 작업자

  • 이들은 서로 다른 많은 시스템이며 각 시스템에는 장점이 있습니다.

    여기서 목표는 무엇입니까?



    무엇이 필요한지 결정하려면 빌드 시스템의 실제 목표를 확인하는 것이 좋습니다.

    저에게는 매일 아침 빌드를 트리거할 수 있어서 최신 기사가 활성화되는 것입니다.
    그런 다음 새로운 변경 사항을 적용할 때마다 빌드되기를 원합니다.

    이렇게 말하면 마지막 부분이 더 쉽습니다. Cloudflare 페이지는 마스터 분기로 푸시할 때마다 자동으로 빌드되므로 이미 준비가 되어 있습니다.

    cron의 경우 Deploy hooks라는 멋진 기능을 도입했습니다. 이것은 각 프로젝트에서 활성화할 수 있는 후크입니다.
    후크는 빌드를 트리거하는 데 사용할 수 있는 URL을 제공합니다.



    이 배포 후크에 새 항목과 빌드해야 하는 분기를 제공할 수 있습니다.

    완료되면 복사할 수 있는 URL을 받게 됩니다.

    여기에서 URL을 트리거하는 방법은 여러 가지가 있지만 이미 Cloudflare에 있으므로 Cron 작업자를 생성하여 배포 후크를 시작할 수 있습니다.

    Cloudflare 크론 작업자



    먼저 Cloudflare에서 작업자 섹션을 엽니다.
    그런 다음 클릭하여 새 서비스를 추가합니다.



    예약된 함수를 만들 것이므로 HTTP handler 함수를 사용했습니다.

    단계를 따르면 작업자에 대한 실제 코드를 얻을 수 있습니다.

    기본 예제 중 하나를 사용하여 특정 URL에 게시했습니다.

    async function gatherResponse(response) {
      const { headers } = response;
      const contentType = headers.get('content-type') || '';
      if (contentType.includes('application/json')) {
        return JSON.stringify(await response.json());
      } else if (contentType.includes('application/text')) {
        return response.text();
      } else if (contentType.includes('text/html')) {
        return response.text();
      } else {
        return response.text();
      }
    }
    
    async function handleRequest() {
      const init = {
        method: 'POST',
        headers: {
          'content-type': 'application/json;charset=UTF-8',
        },
      };
      const response = await fetch('{YOUR_DEPLY_HOOK}', init);
      const results = await gatherResponse(response);
      return new Response(results, init);
    }
    
    addEventListener('fetch', (event) => {
      return event.respondWith(handleRequest());
    });
    


    이 설정은 fetch 요청에 수신기를 추가하고 handleRequest 함수를 실행합니다.

    그 대가로 응답으로 기록됩니다(선택적 단계).

    여기서 주목해야 할 것은 addEventListener 입니다. 이것이 후크를 트리거하는 것입니다.

    이를 fetch로 설정하면 URL 끝점으로 사용할 수 있으므로 작업자의 URL을 열고 빌드를 트리거할 수 있어야 합니다.



    위의 스크린샷에 표시된 버튼을 누르면 이 웹후크가 트리거됩니다.
    지금 배포로 이동하면 배포가 트리거된 것을 볼 수 있습니다.

    이 모든 것이 일정에 따라 작동하도록 하려면 새 트리거를 추가하기만 하면 됩니다.

    작업자 상세 화면 내 상단의 트리거를 클릭하여 새로운 크론 트리거를 추가합니다.



    이 작업이 완료되면 돌아가서 작업자 코드를 편집하여 이 트리거를 수락해야 합니다.

    이전에 옵션으로 fetch를 어떻게 사용했는지 기억하십니까?
    cron으로 작업하려면 scheduled를 옵션으로 사용해야 합니다.

    Note: You can still use both if you'd like too



    addEventListener('scheduled', (event) => {
      event.waitUntil(handleRequest());
    });
    
    addEventListener('fetch', (event) => {
      return event.respondWith(handleRequest());
    });
    


    이제 cron으로 트리거된 작업자가 생겼습니다!

    이 전체 프로세스는 매우 빠르게 진행되었으며 산들 바람이었습니다.
    지금까지 사용한 빌드 시스템 중 가장 쉽고 빠릅니다.

    읽어주셔서 감사합니다. 연결해 봅시다!



    제 블로그를 읽어주셔서 감사합니다. 내 이메일 뉴스레터를 구독하고 Facebook에 연결하거나

    좋은 웹페이지 즐겨찾기