GitHub 작업 구성 – 람다에서 트윗하기

다음은 CI/CD 파이프라인을 통해 GitHub를 사용하는 자동화 부분입니다. 가장 먼저 할 일은 .github/workflows 폴더에 aws.yml이라는 파일을 생성하는 것입니다. 확장자는 YAML 형식을 따르는 파일임을 암시합니다.

가장 먼저 지정할 것은 파이프라인의 이름과 파이프라인이 실행되어야 하는 조건입니다.

name: Build and deploy lambda-cycles image

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
# Job definitions


지금은 누군가가 메인에 무엇인가를 넣을 때마다 그리고 누군가가 메인에 풀 리퀘스트를 열 때마다 파이프라인이 실행되기를 원합니다.

다음은 워크플로우의 일부인 작업을 정의하는 것입니다. 이 경우에는 두 가지가 있습니다. 하나는 애플리케이션을 준비하고 다른 하나는 애플리케이션을 게시하는 것입니다.

이미지 준비 – 빌드



작업을 정의하려면 작업의 일부를 형성하는 steps를 지정해야 합니다. 개별적으로 보다 친숙한 이름과 작업이 실행되는 실행기 유형을 지정할 수 있습니다. 우리는 복잡한 것을 사용하지 않을 것이므로 ubuntu-latest가 잘 작동합니다.

  build:
    name: Build
    runs-on: ubuntu-latest
    steps:


다음으로 할 일은 작업의 일부인 단계를 지정하는 것입니다.

단계



새로 푸시된 코드의 복사본을 메인에 가져와야 합니다. 체크아웃 작업을 사용합니다.

    - name: Checkout
      uses: actions/checkout@v2


AWS와 상호 작용할 것이므로 러너*에서 자격 증명을 구성해야 합니다. Amazon은 이에 대한 작업을 제공합니다. 지정해야 하는 것은 자격 증명입니다(이전에 *repo에서 비밀로 설정함).

    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: eu-west-1


이 두 단계는 내가 pipenv를 사용하고 있기 때문에 구현에 따라 다르므로 Python을 설치한 다음 pipenv를 설치하고 종속성을 설치해야 합니다.

    - name: Set up Python 3.8
      uses: actions/setup-python@v1
      with:
        python-version: 3.8

    - name: Install pipenv
      run: |
        pip install pipenv
        pipenv install


다음 세 단계는 모두 람다 인스턴스를 만드는 데 사용할 이미지를 만드는 것입니다.

첫 번째 단계는 make container 를 호출합니다. 이전 게시물에서 빌드하고 lambda-cycles 로 태그를 지정하기 위해 추가한 유틸리티입니다. 두 번째 단계에서는 이 이미지를 압축 파일로 내보냅니다. 세 번째 단계는 새로 내보낸 Docker 이미지를 아티팩트로 저장하여 다음 작업에서 사용할 것입니다.

    - name: Build lambda-cycles image
      run: make container

    - name: Pack docker image
      run: docker save lambda-cycles > ./lambda-cycles.tar

    - name: Temporarily save Docker image and dependencies
      uses: actions/upload-artifact@v2
      with:
        name: lambda-cycles-build
        path: |
          ./shapefiles/
          ./requirements.txt
          ./lambda-cycles.tar
        retention-days: 1


terraform을 사용하여 인프라 생성을 구성, 초기화하고 마지막으로 계획해야 합니다. 첫 번째 작업의 경우 Hashicorp는 사전 정의된 작업을 제공하며 다음 두 작업은 terraform 콘솔 도구를 사용하는 것으로 충분합니다.

    - name: Set up terraform
      uses: hashicorp/setup-terraform@v1

    - name: Terraform init
      run: terraform -chdir=terraform init

    - name: Terraform plan
      run: terraform -chdir=terraform plan


AWS에서 인프라 생성



GitHub Actions가 빌드 작업을 완료하면 배포 작업으로 이동할 수 있습니다. 이를 정의하기 위해(이름 및 러너 정보와 함께) 이 작업이 build 작업에 따라 다르며 매우 중요하게는 이 작업을 실행할 분기가 main 분기일 때만 실행되어야 함을 나타냅니다. , if 지침?을 참조하십시오.

    deploy:
    name: Deploy
    runs-on: ubuntu-latest
    needs: build
    if: github.ref == 'refs/heads/main'

    steps:


단계



평소와 같이 actions/checkout@v2가 포함된 코드 사본을 얻습니다.

    - name: Checkout
      uses: actions/checkout@v2


자격 증명을 구성합니다. 각 작업은 다른 실행기에서 실행됩니다.

    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: eu-west-1


이전 작업에서 Docker 이미지 및 기타 종속성이 포함된 lambda-cycles-build라는 아티팩트를 생성한 것을 기억하십니까? – 음, 이제 다운로드하고 그 후에 docker load를 사용하여 이미지를 가져오고 docker에서 사용할 수 있도록 합니다.

    - name: Retrieve saved Docker image
      uses: actions/download-artifact@v2
      with:
        name: lambda-cycles-build
        path: ./

    - name: Docker load
      run: docker load < ./lambda-cycles.tar


마지막으로 terraform을 다시 구성하고 초기화하고 마지막으로 계획된 변경 사항을 적용합니다. 사람이 개입할 필요 없이 변경 사항이 자동으로 승인되도록 -auto-approve 옵션을 사용하고 있습니다.

    - name: Set up terraform
      uses: hashicorp/setup-terraform@v1

    - name: Terraform init
      run: terraform -chdir=terraform init

    - name: Terraform apply
      run: terraform -chdir=terraform apply -auto-approve


이것으로 GitHub에서 람다를 자동으로 빌드하고 배포하는 방법을 설명하는 6부작 시리즈를 마칩니다.

이 게시물이 끝날 때까지 how the repository looks like입니다.

뭔가 명확하지 않거나 오타를 발견한 경우 Twitter에서 저를 찾아 이 게시물에 대해 질문할 수 있습니다. 이 시리즈의 최종 코드는 GitHub이고 자전거 네트워크 상태를 트윗하는 계정은 입니다.

좋은 웹페이지 즐겨찾기