Hugo S3 배포

6821 단어 actionshackathon

내 워크플로우



Hugo에서 구성된 배포 대상을 사용하여 S3에 배포하는 새 GitHub Action을 만들었습니다. Hugo 배포에 대한 추가 정보는 official documentation 에서 확인할 수 있습니다.

왜요?



저는 개인 웹사이트에 Hugo를 사용하며 변경하거나 새 콘텐츠를 만들 때마다 로컬에서 사이트를 구축한 다음 배포해야 합니다. 하지만 더 이상은 아닙니다. 이제 커밋할 때마다 GitHub가 사이트를 구축하고 S3에 배포하고 내 CloudFront 배포를 무효화하여 새로운 콘텐츠를 즉시 사용할 수 있도록 합니다.

비슷한 조치가 있습니까?



예, 아니오. Marketplace를 탐색하고 해결 방법을 찾을 수 있었습니다. 예를 들어 Hugo 사이트를 구축하는 작업이 있고 출력 폴더(일반적으로 public)를 S3와 같은 원격 대상에 업로드하여 수동으로 배포하는 작업이 있습니다. 그리고 CloudFront 배포를 무효화하는 작업이 있습니다.

그러나 Hugo는 이미 이 모든 작업을 수행하는 메커니즘인 hugo deploy 명령을 제공합니다. 그러나 이 명령을 실행하고 구성된 배포를 실행하기 위해 찾을 수 있는 GitHub 작업이 없었습니다.

이 조치는 이것을 해결합니다.

구현 세부정보



이를 위해 Docker 컨테이너 작업을 만들었습니다. 사용 가능한 설명서here .


도커파일

컨테이너를 정의하기 위해 Dockerfile을 사용합니다.

FROM pahud/awscli-v2:node-lts

RUN yum update -y && \
    yum install -y curl jq

COPY entrypoint.sh /

ENTRYPOINT ["/entrypoint.sh"]

CloudFront 무효화를 수행할 수 있도록 이미 AWS CLI가 포함된 기본 이미지를 사용하고 있습니다. 하단 참조.

그런 다음 나중에 컨테이너에 Hugo를 설치하는 데 사용할 curljq를 설치합니다.

마지막으로 진입점을 지정합니다.


entrypoint.sh

설명서에 설명된 대로 실행 가능하게 만드는 것을 기억하는 것이 중요합니다.

chmod +x entrypoint.sh

진입점은 작업이 실행될 때 실행될 논리를 포함하는 것입니다.

먼저 오류가 있는 경우 파이프라인을 즉시 중단합니다.

set -eo pipefail

환경 변수로 전달하는 다른 매개변수를 확인합니다. 예:

if [ -z "$AWS_ACCESS_KEY_ID" ]; then
  echo "error: AWS_ACCESS_KEY_ID is not set"
  err=1
fi

이 작업에 대한 AWS 프로필을 생성합니다.

aws configure --profile hugo-s3 <<-EOF > /dev/null 2>&1
${AWS_ACCESS_KEY_ID}
${AWS_SECRET_ACCESS_KEY}
${AWS_REGION}
text
EOF

그런 다음 curl로 최신 버전을 가져와서 Hugo를 설치합니다(여기에 코드를 추가하지 않고 저장소에서 찾을 수 있음).

사이트를 구축하고 배포합니다.

hugo
hugo deploy

그리고 마지막으로 AWS 프로필을 정리합니다(컨테이너가 나중에 즉시 파괴되는 경우 실제로 필요하지는 않지만 나중에 정리하는 것이 좋습니다).


action.yml

작업에 대한 메타데이터를 포함합니다.

name: 'Hugo S3'
description: 'Deploy Hugo with an S3 target'
author: 'Pedro Lopez'
branding:
  icon: 'book'
  color: 'purple'
runs:
  using: 'docker'
  image: 'Dockerfile'

제출 범주



DIY 배포

Yaml 파일 또는 코드 링크



이 작업은 이제 GitHub Marketplace에서 사용할 수 있습니다.
https://github.com/marketplace/actions/hugo-s3 .


플랍카 / 휴고-s3-액션


S3 대상으로 구성된 `hugo deploy`를 사용하기 위한 GitHub 작업





휴고 S3 액션


Hugo 리포지토리에 구성된 S3 대상이 있는 경우 실행할 GitHub 작업hugo deploy입니다.

용법

name: Hugo S3
on
  push
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:
    
    runs-on: ubuntu-latest

    steps:
      - name: Check out master
        uses: actions/checkout@master
          
      - name: Deploy site
        uses: plopcas/[email protected]
        env:
          AWS_REGION: 'eu-west-2'
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

구성

Settings / Secrets 아래의 저장소에서 다음 속성을 비밀로 설정합니다.

이름
필수의
설명


AWS_지역

AWS 지역

AWS_ACCESS_KEY_ID

배포를 실행할 수 있는 권한이 있는 액세스 키

AWS_SECRET_ACCESS_KEY

비밀 키

Hugo에서 S3에 대한 배포를 구성하는 방법에 대한 정보는 여기https://gohugo.io/hosting-and-deployment/hugo-deploy/에서 찾을 수 있습니다.
선택적으로 config.toml 파일에 CloudFront 배포 ID를 포함할 수 있습니다. 사용하는 키가 키를 무효화하고 이 경우 S3에 배포할 수 있는 권한을 부여할 수 있는지 확인하십시오.…

View on GitHub


또한 GitHub에서 공개적으로 사용할 수 있는 내 개인 사이트https://retrolog.io/에도 구성했습니다.

성공적인 실행의 예는 여기에서 볼 수 있습니다.
https://github.com/plopcas/retrolog/runs/1018289670 .

용법

name: Hugo S3

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - name: Check out master
        uses: actions/checkout@master

      - name: Deploy site
        uses: plopcas/[email protected]
        env:
          AWS_REGION: 'eu-west-2'
          AWS_ACCESS_KEY_ID: ${{ secrets.ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.ACCESS_KEY_SECRET }}

추가 리소스/정보



GitHub 저장소https://github.com/plopcas/hugo-s3-action
새 작업을 사용하는 개인 사이트https://retrolog.io/
GitHub의 개인 사이트https://github.com/plopcas/retrolog

참조



GitHub 작업 설명서https://docs.github.com/en/actions/creating-actions/creating-a-docker-container-action
GitHub의 Hugohttps://github.com/gohugoio/hugo
AWS CLI Docker 기본 이미지https://hub.docker.com/r/pahud/awscli-v2

좋은 웹페이지 즐겨찾기