GitHub-Actions를 어떻게 사용했는지 기억도 잘 떠오르지도 않고

Secret을 어떻게 다뤘는지도 기억이 가물거려서 간단한 예제 겸 교육자료로 써먹고자 진행해봤다.

 

1. git clone

  - 각자 상황에 맞는 Repository를 이용하면 된다.

❯ git clone git@github.com:whatwant-school/node-web.git

 

 

2. coding

  - 예제를 위해, node.js 웹 서비스를 하나 만들어 보자.

❯ nano app.js

  - 그냥, 간단히 어느 host에서 서비스를 하고 있는 것인지를 보여주는 웹페이지이다.

const http = require('http');
const os = require('os');
console.log(“node-web server starting...");
var handler = function(request, response) {
  console.log("Received request from " + request.connection.remoteAddress);
  response.writeHead(200);
  response.end("You've hit " + os.hostname() + "\n");
};
var www = http.createServer(handler);
www.listen(8080);

 

 

3. write Dockerfile

  - 위에서 작성한 웹서비스를 구동할 container image를 어떻게 구성할지를 작성해보자.

❯ nano Dockerfile

  - 내용은 심플하다.

FROM node:latest

ADD app.js /app.js

ENTRYPOINT ["node", "app.js"]

 

 

4. ready DockerHub

  - Actions를 이용해 만들어진 container image를 업로드할 DockerHub의 Repository를 준비하자.

  - 이미 1.0 버전이 있지만 해당 버전을 업데이트하는 방식으로 구성할 것이다.

 

 

5. get Token

  - Actions에서 DockerHub로 업로드 하기 위해서는 계정 인증이 필요하고, 이 때 사용할 Token을 발행해보자.

  - Write 권한을 필수로 넣어줘야 한다.

 

 

6. mkdir

  - Repository 내부에 Actions workflow를 작성할 경로를 생성하자.

❯ mkdir -p .github/workflows/

 

 

7. write Action

  - 내가 사용할 Action workflow를 작성하자.

❯ nano .github/workflows/deploy-image.yml

  - 일부 내용은 각자의 상황에 맞춰서 업데이트 하면 된다.

name: Build and Push Docker Image
on:
  push:
    branches:
      - main  
jobs:
  build-and-push-image:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
      uses: actions/checkout@v2

    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v1

    - name: Login to DockerHub
      uses: docker/login-action@v1
      with:
        username: ${{ secrets.DOCKERHUB_USERNAME }}
        password: ${{ secrets.DOCKERHUB_TOKEN }}

    - name: Build and push
      id: docker_build
      uses: docker/build-push-action@v2
      with:
        push: true
        tags: whatwant/node-web:1.0

 

 

8. Set Secret

  - Action workflow에서 사용하는 Secret 변수 값을 입력하자.

  - USERNAME과 TOKEN을 입력하면 된다.

 

 

 

9. push

  - 이제 준비는 끝났다. push 해보자.

❯ git add -A

❯ git commit -m "make action's workflow"

❯ git push origin main

 

 

10. Actions

  - 입력한대로 잘 동작했는지 확인해보자.

  - 상세 내용도 확인해볼 수 있다.

 

  - 로그 레벨로도 확인해볼 수 있다.

 

  - 정말 DockerHub에 업로드까지 잘 되었는지 확인해보자.

 

 

여기까지~

 

반응형


Prologue #1


최근 Docker Hub 이야기가 Hot 했다.


무료로 마음껏 사용했던 Docker Hub였는데,

Rate Limit 제한을 하게 되어 의도치 않은 Fail 메시지들을 보게 되어 다들 부랴 부랴 계정 등록하기도 하고 라이선스 구매를 하기도 하고...


특히 통합 빌드서버를 사용하는 경우

미리 준비하지 않은 경우 빌드서버에서 rate limit가 걸려 빌드가 계속 fail 되는 사태가 발생해버렸기에 난리였다!



Prologue #2


요즘 Kubernetes 공부를 하고 있는데,

Local에서만 하기에는 좀 제한적이어서 Google Cloud Platform(GCP) 환경에서 테스트를 해보고 있다.


그런데, Minikube 환경에서는 Local에서 만든 Container Image를 반영하기가 손쉬웠는데

GCP에 있는 K8s 환경에서는 그냥은 안되는 것 같다.


Docker Hub에 Local에서 만든 Container Image를 업로드 하면 손쉽게 될 것만 같다.





Body


우선 Docker Hub 사이트에 방문을 해보자.


https://hub.docker.com/



첫 페이지부터 Sign Up을 요구한다.

ID 넣고 Email 넣고 Password 넣고 로봇이 아니라고 체크 한 번 해주고 가입 완료하자.

발송된 Email에서 Confirm 한 번 눌러주면 최종적으로 가입 완료된다.



Sign In 화면은 아래와 같다.




로그인 후 첫화면은 아래와 같다.





그러면, 이제 docker login을 해보자.


실습 환경은 "Ubuntu 18.04" 이다.


Docker 설치는 아래 링크를 참조하기 바란다.

- https://whatwant.tistory.com/entry/Docker-Install-Ubuntu-16041804-64bit-using-Download



일단 login을 시도해보자.


$ docker login



뭔가 permission error가 발생한다.




그러면, Permission 이슈를 해결하고, 다시 해보자.


$ sudo chmod 666 /var/run/docker.sock


$ docker login



잘 되었다 !!!



push 과정까지 실제로 따라해보려면 실습 코드들이 필요하기에 이후 내용은 아래 GitHub Repo를 참고해서 진행하자.


- https://github.com/whatwant-school/docker-hub/tree/main/step01



$ docker build -t ${username}/count:v1 .


$ docker push ${username}/count:v1



Docker Hub에 접속해서 제대로 올라왔는지 확인해보자.




여기까지~!!

반응형

+ Recent posts