Dev./Github Actions

[Cloud] CD: Github Actions - docker build

Ivan'show 2023. 8. 18.
728x90
반응형

docker 파일을 actions 로 빌드해보기

이번에는 push 가 되었을 때 도커파일로 장고 앱이 빌드가 되고 이미지가 출력되는 워크플로우를 만들어보자

기존에 사용하던 명령어

docker run --name lion-app ...
docker images

참고용

.github/workflow/lesson1.yml

name: lesson1

on: # if the below events are on,
  push: # push event
  pull_request: # pull_request event

jobs: # these below tasks are on
  echo-event:
    name: echo event
    runs-on: ubuntu-latest
    steps:
      - name: get event
        run: echo "This event is ${{github.event_name}}"

      - name: echo github context
        run: echo "${{github.repositoryUrl}}"

  docker-build: # job name
    name: docker build
    runs-on: ubuntu-latest
    steps:
        - uses: actions/checkout@v3
        - name: Set up Docker buildx
          uses: docker/setup-buildx-action@v2
        - name: Build and Export
          uses: docker/build-push-action@v4
          with:
            context: lion_app
            tags: lion-app:latest
            outputs: type=docker,dest=/tmp/lion_app.tar
        - name: Upload artifact
          uses: actions/upload-artifact@v3
          with:
            name: lion-app
            path: /tmp/lion_app.tar
        - name: docker images
          if: ${{ always() }}
          run: |
            docker load --input /tmp/lion_app.tar
            docker images lion-app
            

  docker-images:
    # Always execute the bleow
    if: ${{ always() }} 
    needs: docker-build
    name: docker images
    runs-on: ubuntu-latest
    steps:
        - name: Download artifact
          uses: actions/download-artifact@v3
          with:
            name: lion-app
            path: /tmp
        - name: Load image
          run: |
            docker load --input /tmp/lion_app.tar
        - name: docker images
          run: |
            docker images lion-app

actions/checkout@v3: 이 액션은 GitHub 저장소의 코드를 작업 러너에 체크아웃한다. 워크플로우에서 저장소의 코드에 액세스해야 하는 경우에 사용

https://github.com/marketplace/actions/checkout

 

docker/setup-buildx-action@v2: 이 액션은 Docker Buildx를 설정한다. Buildx는 Docker의 플러그인으로, 멀티 플랫폼 이미지 빌드와 기타 고급 빌드 기능을 제공

https://github.com/marketplace/actions/docker-setup-buildx

 

docker/build-push-action@v4: 이 액션은 Docker 이미지를 빌드하고 선택적으로 레지스트리에 푸시한다. 또한 이미지를 tar 파일로 내보내는 등의 추가 기능을 제공

https://github.com/marketplace/actions/build-and-push-docker-images

 

actions/upload-artifact@v3actions/download-artifact@v3: 이 액션들은 작업 간에 파일을 공유할 수 있도록 "artifacts"라는 임시 저장 영역을 사용한다. upload-artifact 액션은 파일을 artifacts로 업로드하고, download-artifact 액션은 다른 작업에서 해당 artifacts를 다운로드한다.

https://github.com/marketplace/actions/upload-a-build-artifact

 

 

Artifact

Artifact는 GitHub Actions의 일시적인 저장 영역으로, 워크플로우 실행 중에 작업 간에 데이터를 공유하는 데 사용된다. 예를 들어, 한 작업에서 생성된 파일을 다른 작업에서 사용해야 하는 경우, 해당 파일을 artifact로 업로드한 후 다른 작업에서 다운로드할 수 있다.

Artifact 메커니즘:

  • 워크플로우의 한 작업에서 파일을 artifact로 업로드
  • 업로드된 artifact는 워크플로우의 실행 기간 동안 저장
  • 다른 작업에서 해당 artifact를 다운로드하여 사용할 수 있음
  • 워크플로우 실행이 완료되면 artifact는 선택적으로 일정 기간 동안 보관되거나 삭제될 수 있음

build 내에서도 images 출력되고, 다른 Job 인 docker images 에서도 다운로드 받아 출력되는 것 확인

 

 

 

 

 

 

728x90
반응형

댓글