uuuhhh
아주조코
uuuhhh
  • 전체 (68)
    • Cloud (22)
      • AWS (17)
      • NCP (4)
      • Tech (1)
    • Kubernetes (16)
    • Docker (1)
    • CI/CD (13)
    • Network (4)
    • OS (10)
      • Linux (9)
      • Concepts (1)
    • Language (0)
      • Golang (0)
    • Project (1)
      • Drone (1)
    • 요모조모 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • ⚠️ 2022/11/08 - 11/13 블로그 이관 작업 ⋯

인기 글

태그

  • NKS
  • Linux
  • minikube
  • network
  • pod
  • AWS
  • CI
  • 데이터베이스
  • argocd
  • Jenkins
  • Instance
  • NodePort
  • service
  • ncp
  • Iam
  • LoadBalancer
  • kubernetes
  • build
  • EC2
  • docker

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
uuuhhh
CI/CD

Github Action

Github Action
CI/CD

Github Action

2022. 11. 12. 13:39

▪︎ Git Repo 만들기


  • SpringBoot로 “hello” GET 요청이 들어오면 “Hello World!” 문자열을 반환하는 아아아주 간단한 애플리케이션 구현

 

  • Intellij에서 Github Commit 해보기
    • Help → Find Action..
    mac 단축기 ‘command + shift + a’ 라는데 이상한 terminal만 뜸..

 

  • 그리고 만들고자 하는 Repo 이름 적고 설명 적고 ‘Share’로 동기화한 후에 Commit 하고자 하는 폴더 지정 후에 ‘Commit’!

 

 

▪︎ Github Action 구성해보기


  • 깃허브 레포의 Action - Java with Maven

 

  • maven.yml 작성
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: <https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven>

name: Java CI with Maven

on:
  push:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    
    - name: Set up JDK 17
      uses: actions/setup-java@v1
      with:
        java-version: 17
        
    - name: Build with Maven
      run: mvn -B package --file pom.xml -DskipTests
      
    - name: Set up QEMU
      uses: docker/setup-qemu-action@v1
      
    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v1
      
    - name: Login to DockerHub
      uses: docker/login-action@v1 
      with:
        username: ${{ secrets.USERNAME }}
        password: ${{ secrets.PASSWORD }}
        
    - name: Build and push
      env:
        NAME: uh2959
        REPO: cn-action
      run: |
        docker build -t $REPO .
        docker tag $REPO:latest $NAME/$REPO:latest
        docker push $NAME/$REPO:latest

 

  • 도커 허브 계정 같은 민감한 정보인 경우 하드코딩의 보안 취약점을 보완하기 위해 github의 secrets로 설정하여 인자 값 전달\

 

  • 그리고 start commit

 

  • 가보자 가보자!!

  • …는 실패의 연속
  • 보이십니까.. 연속된 빨간불..
  • 울고 싶었습니다..🥲 아니 울었습니다

 

  • 그래도 불굴의 의지🔥를 가지고..

 

  • 결국 초록불 성공!!!

 

  • 위 과정의 트러블 슈팅은 맨 마지막에서 →→

 

  • 도커 허브에 정상적으로 Push 되었는지도 확인!!

 

▪︎ 소스코드 수정 커밋 발생 시 자동 빌드 확인


  • HelloController.java에서 Get 메소드의 “Hello World!” → “Hello the new World!” 로 수정

 

  • Commit → Push

 

  • 자동 빌드 확인

 

  • 성공!!

 

▪︎ 트러블 슈팅


 

▪︎ 아 물론 야믈파일 작성 잘못


  • Workflow
→ Github repo의 ‘master’ 브랜치에 무언가 push가 된다면
→ 스프링 부트 애플리케이션을 jar 파일로 maven 빌드하고
→ jar 파일을 도커 image로 빌드하고
→ docker hub에 push 한다.

    를 Github Action에 yaml 파일로 정의를 하여 자동화를 구현한다.

 

  • maven.yml
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: <https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven>

name: Java CI with Maven

on:
  push:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    
    - name: Set up JDK 17
      uses: actions/setup-java@v1
      with:
        java-version: 17
        
    - name: Build with Maven
      run: mvn -B package --file pom.xml -DskipTests
      
    - name: Set up QEMU
      uses: docker/setup-qemu-action@v1
      
    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v1
      
    - name: Login to DockerHub
      uses: docker/login-action@v1 
      with:
        username: ${{ secrets.USERNAME }}
        password: ${{ secrets.PASSWORD }}
        
    - name: Build and push
      env:
        NAME: uh2959
        REPO: cn-action
      run: |
        docker build -t $REPO .
        docker tag $REPO:latest $NAME/$REPO:latest
        docker push $NAME/$REPO:latest

 

  • 템플릿 라인별 해석
    • name : action의 이름 정의 (workflow의 이름) / 명령어 이름
    • on : workflow의 이벤트 방식을 정의 (push, MR, PR 이벤트 등등..)
    • jobs : 단계적인 job을 정의
      • 여러 가지를 정의할 시 수평적(parallel)으로 동작
      • need를 명시하면 순차적으로 수행
    • build : job의 이름
    • runs-on : job을 실행할 환경 (windows, mac, ubuntu..)
    • steps : job의 명령 집합
    • uses : 또 다른 템플릿의 action 호출
    • run : 실행할 명령어 라인

 

 

▪︎ Dockerfile 미작성 - 왜 만들지 않았을까..


  • Dockerfile
FROM openjdk:15.0.2
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","app.jar"]
저작자표시 (새창열림)

'CI/CD' 카테고리의 다른 글

Jenkins Back-End Gradle Build  (0) 2022.12.13
Jenkins Webhook 연동  (0) 2022.12.12
ArgoCD Helm 설치 & 테스트  (0) 2022.12.10
Jenkins 환경 설정 및 빌드 테스트  (0) 2022.12.09
Jenkins Helm 설치  (0) 2022.12.09
  • ▪︎ Git Repo 만들기
  • ▪︎ Github Action 구성해보기
  • ▪︎ 소스코드 수정 커밋 발생 시 자동 빌드 확인
  • ▪︎ 트러블 슈팅
'CI/CD' 카테고리의 다른 글
  • Jenkins Webhook 연동
  • ArgoCD Helm 설치 & 테스트
  • Jenkins 환경 설정 및 빌드 테스트
  • Jenkins Helm 설치
uuuhhh
uuuhhh
피땀눈물의 삽질기

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.