현대 오토에버 클라우드 스쿨
Git Action
Gom3rye
2025. 6. 23. 15:10
728x90
반응형
Git Action을 이용해서 Docker Image를 DockerHub에 배포
소스 파일을 작성하고 실행 후 Dockerfile을 이용해서 이미지 생성
- go 버전 확인 및 설치
- Mac M1의 경우는 아키텍쳐가 다르므로 확인하고 다운로드 해야 한다.
- apt를 이용해서 설치하는 경우는 최신 버전이 아닐 수 있으니 유의
go version
# 최신 버전 설치
sudo snap install go --classic
- 소스 파일 만들기 vi main.go
package main
import(
"fmt"
"os"
)
func main(){
fmt.Fprintln(os.Stdout, "Go Go Go")
}
- 실행 시켜서 확인해보기
go run main.go # Go Go Go
- 이미지 생성 및 컨테이너 구동
- 컨테이너를 만들고 commit 명령을 이용해서 컨테이너를 이미지로 생성(명령 이용)
- Dockerfile을 이용해서 이미지를 생성(코드 이용)
FROM golang:1.15-alpine3.12 AS gobuilder-stage
WORKDIR /usr/src/goapp
COPY main.go .
RUN CGO_ENABLED=0 GOOS=linux COARCH=amd64 go build -o /usr/local/bin/gostart
FROM scratch AS runtime-stage
COPY --from=gobuilder-stage /usr/local/bin/gostart /usr/local/bin/gostart
CMD ["/usr/local/bin/gostart"]
python, go, node → 소스 파일 + Dockerfile ⇒ 실행할 때 소스 코드 필요하다.
→ 소스 코드 많으면 src 폴더 만들어서 거기를 복사
java → dockerfile이나 git action에서 직접 빌드하지 않는 이상 소스 코드 안 필요하고 jar 파일만 있으면 된다.
- 이미지 빌드
docker build -t 이미지이름 도커파일위치
docker build -t goapp:1.0 .
- 컨테이너를 생성해서 확인 (웹 프로그래밍이 아니고 한 번 실행되는 거니까 -d 옵션 필요 없음, 계속 실행되어야 할 때 -d 옵션 주는 것)
docker run --name goapp-deploy goapp:1.0 # Go Go Go
- git hub에 push
- git 설치
sudo apt update sudo apt install git git version
# 초기화
git init
# stage에 파일을 추가 (디렉토리에 있는 거 전부다 추가 .)
git add .
# 로컬 레포지토리에 변경 내용 적용
git commit -m "메시지"
# 처음 git을 사용하면 email과 username을 추가해야 한다.
git config --global user.email "~~~~@gmail.com"
git config --global user.name "gom3rye" ##-> 비로소 로컬에 등록 완료
# git hub에 접속해서 repository를 생성하고 url을 복사
<https://github.com/Gom3rye/goaction.git>
# git hub에서 access token 생성
developer settings > personal access tokens > tockens(classic) > generate new tockens(classic) > 권한 repo & workflow 체크
[발급받은 tocken은 push할 때 비밀번호로 쓸 것]
# repository 등록
git remote add 레포지토리이름 레포지토리경로
git remote add origin <https://github.com/Gom3rye/goaction.git>
# push
git push 저장소이름 브랜치이름(이전의 기본 브랜치 이름은 main이었으나 지금은 master (git status 하면 알 수 있다.))
# (브랜치 이름 바꾸고 바로 쓰고 싶으면 git checkout -b 브랜치이름)
git push origin main
- yaml
- 이 기종 간에 데이터를 주고 받을 사용하는 포맷 중 하나 (xml이나 json과 역할이 동일)
- 사람이 작성하기도, 보기도 편하고(json의 단점) 사이즈도 xml보다 작음 → Cloud에서 IaC, AI에서 text 처리할 때 yaml 많이 쓴다.
- 작성법
- 들여쓰기는 기본적으로 2칸 또는 4칸을 지원한다.
- 들여쓰기를 이용해서 하위 속성을 설정한다.
- 배열을 표시할 때는 [ ] 안에 나열해도 되고 하위 항목으로 -를 추가해가면서 작성해도 된다.
- JSON에서는 배열을 표시할 때 skills:[”docker”, “kubernetes”] 형태로 배열을 표시하는데 yaml에서는 “
skills”:
- docker
- kubernetes 로 표시한다.
- JSON에서는 배열을 표시할 때 skills:[”docker”, “kubernetes”] 형태로 배열을 표시하는데 yaml에서는 “
- 주석은 #뒤에 기재한다.
- 데이터 표현
- 참/거짓: true/false, yes/no
- 숫자는 “”없이 기재
- 줄바꿈은 |
- JSON에서는 \n
- git action
- git hub에서 제공하는 CI/CD Tool로 개발의 workflow를 자동화할 수 있게 해주는 Tool이다.
- Github Action의 Core 개념
- Workflow
- 자동화된 전체 프로세스로 하나 이상의 Job으로 구성되고 Event에 의해 예약되거나 트리거될 수 있다.
- Workflow는 yaml로 작성되고 github repository에 .github/workflows 디렉토리 아래에 저장한다.
- Event
- Workflow를 트리거하는 특정 활동이나 규칙인데 커밋을 레포지토리에 push하고 pull을 요청할 때 Github에서 활동이 시작된다.
- Job
- 여러 step으로 구성되고 단일 가상 환경에서 실행된다.
- 다른 Job에 의존 관계를 가질 수 있고 독립적으로 병렬로 실행하는 것도 가능하다.
- Step
- Job 안에서 순차적으로 실행되는 프로세스 단위이다.
- step에서 명령을 내리거나 action을 실행할 수 있다.
- Action
- Job을 구성하기 위한 step 등의 조합으로 구성된 독립적인 명령이다.
- Workflow의 가장 작은 빌드 단위이다.
- Workflow에서 action을 사용하기 위해서는 Action이 반드시 Step을 포함해야 한다.
- Action을 구성하기 위해서 레포지토리와 상호작용하는 커스텀 코드를 만들 수 있다.
- Runner
- Github Action Runner 애플리케이션이 설치된 머신으로 Workflow가 실행될 인스턴스이다.
- Workflow
- Dockerhub에서 Token과 레포지토리를 생성
- hub docker에서 actiontest 레포지토리 만들기
- account settings > Personal access tokens > Read, Write, Delete 권한 주고 Generate > 발급된 Token copy 해놓기(한 번 발급되면 다시는 보여주지 않는다.)
- Token: [발급 받은 토큰 값]
- yaml 파일 만들어서 적용
- git hub에서 만들 수 있고 프로젝트의 .github/workflows 디렉토리에 yaml 파일을 추가해도 된다.
- 디렉토리를 생성하고 yaml 파일 추가
mkdir -p .github/workflows vi .github/workflows/actiontest.yml
name: actiontest # 여기에 이벤트 작성 (main 브랜치에 push가 발생하면) on: push: branches: ["main"] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Go uses: actions/setup-go@v3 with: go-version: 1.15 - name: Build run: go build -v ./... - name: Dockerhub Login uses: docker/login-action@v1 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: build and release to DockerHub env: NAME: kyla333 REPO: actiontest run: docker build -t $REPO . docker tag $REPO:latest $NAME/$REPO:latest docker push $NAME/$REPO.latest
- 변경된 내용 적용
git add .
git commit -m "actiontest"
git push origin main # -> Username and password required 라고 오류 뜬다.
- git secret key 등록
- git > settings > secrets and variables > actions > new repository secrets에 등록
- git actions에서 Re-run jobs
- build쪽에서 에러 남 → .github/workflows/actiontest.yml 의 빌드 부분 다시 보기 → tag와 build 부분을 나눠보자.
name: actiontest
on:
push:
branches: ["main"]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: 1.15
- name: Build
run: go build -v ./...
- name: Dockerhub Login
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: build
env:
REPO: actiontest
run:
docker build -t $REPO .
- name: tagging
env:
NAME: kyla333
REPO: actiontest
run:
docker tag $REPO:latest $NAME/$REPO:latest
- name: Release To Dockerhub
env:
NAME: kyla333
REPO: actiontest
run:
docker push $NAME/$REPO:latest
- main.go 파일을 수정하고(Go 4번으로) 다시 push
- docker stop, rm, rmi로 다 지우고 업로드 되는지 확인해보자.
- 코드를 고쳐서 푸시만 하면 끝난 것 → CI
docker run --name goapp-deploy kyla333/actiontest:latest
728x90
반응형