-
Github Actions을 이용한 간단한 Docker 빌드/배포 자동화AI&ML 2023. 2. 7. 20:41반응형
- GitHub Actions는 CI/CD(Continuous Integration/Continuous Deployment) 플랫폼으로 개발자가 코드를 빌드, 테스트 및 배포하는 작업을 자동화할 수 있습니다. GitHub 저장소에 있는 이벤트에 응답하여 사용자 지정 스크립트 또는 미리 정의된 작업을 실행할 수 있습니다.
- GitHub Actions 워크플로우는 저장소의 .github/workflows 디렉토리에 있는 yml 파일의 YAML 구문을 사용하여 정의됩니다. 다음은 소스에 대한 푸시 이벤트에 대해 실행하는 간단한 워크플로의 예를 보여드릴게요.
name: CI on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Run tests run: | echo "Running tests" # Your test command here
이 예제에서는 워크플로가 main 브랜치에 푸시 이벤트에서 트리거됩니다. 누군가 소스를 변경하고 코드를 push 하면 이벤트가 발생합니다. Ubuntu의 최신 버전에서 런타임이 실행되며 코드를 체크아웃하고 테스트 명령을 실행하는 두 단계를 수행하는 예제입니다.
기본개념
- Workflows : 작업그룹
- Events : 작업이 트리거되는 이벤트
- Jobs : 수행가능한 작업단위
- Runners : 실제 Job이 실행되는 서버,(Linux,macOS,Windows)
- Steps : Job 안에서 순서대로 실행되는 task 단위
- Actios: 재사용가능한 job의 step. Github Marketplace 에서 구할수 있음.
express.js 를 활용한 api 서비스를 docker hub 에 등록하는 workflows
- 사전설치: node , vs code 설치
express.js 라이브러리를 이용해서 간단한 API 서비스를 만들고, 이것을 도커 이미지로 만든다음 Docker Hub로 배포하는 부분을 Github action을 통하여 Automation 워크플로우를 구성해볼게요.
- 폴더를 만들고 초기화한 다음 필요한 라이브러리를 설치해줍니다.
npm init npm install express nodemon
- package.json 부분에 아래부분을 nodemon 사용을 위해서 변경합니다.
"scripts": { "start": "nodemon index.js" },
- index.js 파일을 생성하고 아래와 같이 api 서비스 테스트를 할수 있게 기본 코드를 작성합니다.
var express = require('express'); var app = express(); app.get('/', (req, res)=>{ res.send('<h1>Hello Github Actions!</h1>') }); app.listen(3000,'0.0.0.0',()=>{ console.log('Server Start : port 3000'); });
- 모든 소스코드를 저장하고, 아래처럼 실행합니다.
npm start
- 아래처럼 잘 동작하는 것을 확인합니다.
- 이제 도커이미지를 만들기위해서 Dockerfile 을 생성합니다.
# 최신 Node.js LTS 버전 FROM node:19.6.0 # Node.js 앱을 위한 app 폴더 생성 RUN mkdir -p /app # 어플리케이션 폴더를 WORKDIR명령어로 지정 - 서버 가동용 WORKDIR /app # 가능한 package.json 과 package-lock.json을 모두 복사하기 위해서 와일드 카드 사용 COPY package*.json /app/ # 의존성 설치 RUN npm install # 앱 소스코드 추가 COPY index.js /app/ # 앱이 3000번 포트에 바인딩 되어있기 때문에 컨테이너의 3000번 포트를 열어줌 EXPOSE 3000 # 인자값을 지정하지 않을시 node app.js를 실행 CMD [ "node", "index.js" ]
- 터미널에서 도커 이미지를 빌드합니다.
docker build . -t my-express-api
- 도커 이미지가 등록된것을 확인합니다.
PS C:\\src\\express\\actions-template> docker images REPOSITORY TAG IMAGE ID CREATED SIZE my-express-api latest 1ba9ddb1d1a4 About a minute ago 1GB
- 도커 실행
docker run --name my-express-api -p 3000:3000 -d my-express-api
- 아래처럼 잘실행되는것을 확인합니다.
- 지금까지 소스를 Github 로 push 합니다.
- Github Action을 선택하여 Automation workflow를 구성해 봅니다.
name: Docker Image CI on: push: branches: [ "main" ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 name: Check out code - uses: mr-smithers-excellent/docker-build-push@v5 name: Build & push Docker image with: image: <docker-hub-userid>/my-express-api tags: v1, latest registry: docker.io username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }}
- docker hub 에 로그인할 비밀정보를 넣습니다.
소스코드를 저장하고 commit을 하게 되면, action 워크플로우가 시작이되고, 빌드가 완료됩니다.
- Docker Hub에서 확인하면 아래와 같이 등록된 것을 확인할 수 있습니다.
- github source code
JahvoTrust/actions-template (github.com)
Docker Hub가 아닌 Private docker hub 나 Container registery로 배포할수도 있을것입니다. Azure 클라우드를 사용한다면,container registery로 배포하고, Web App 이나 ACI,AKS에서 배포하는데 활용할수 있을것 같습니다.
Github Actions에 관심이 많지만, 인터넷에 나와있는 예제들이 너무 이해하기가 어려워 간단한 예제를 만들어보았습니다. 도움이 되었으면합니다^^
반응형'AI&ML' 카테고리의 다른 글
챗GPT 생성AI의 시대 - 기본개념 이해하기 (0) 2023.04.15 Azure AI Form Recognizer를 활용한 영어단어장 만들기 (0) 2023.02.09 Hugging Face 로 AI 모델 맛보기!! (0) 2023.02.05 초간단한 AI모델 만들기(구글Colab)-Iris.csv (0) 2023.02.02 일타강사 챗GPT(Chat GPT)를 이용하여 파이썬(python)공부하기! (3) 2023.02.02