728x90

목차

     

    Workflow 작성 전 Secrets, Variables 설정

    spring-cloud-hlem의 git token을 먼저 발급해야 한다.

    Git token 발급

    좌측 하단에 Developer settings 클릭 후 Personal access tokens > Fine-grained tokens에 접속한다.

    Generate new token을 클릭한 후 아래 화면에 필요한 내용들을 작성 및 선택한다.

     

    Secrets, Variables 설정

     

    GIT_TOKEN을 등록한 동일한 방법으로 아래 3가지도 등록한다.

    DOCKER_HUB_REGISTRY_NAME
    DOCKER_USERNAME
    DOCKER_PASSWORD

     

     

    Github actions - workflow 작성

     

    name: Image CI discovery-service
    
    # main 브랜치 push & discovery-service의 변경 내역이 있는 경우
    on:
      push:
        branches: [ "main" ]
        paths:
          - 'discovery-service/**'
    
    env:
      GIT_TOKEN: ${{ secrets.GIT_TOKEN }}                                 # helm chart가 존재하는 github target repository에 token이 있어야 접근 가능
      TARGET_REPOSITORY: ${{ vars.TARGET_REPOSITORY }}                    # helm chart github path : ex) Parkjinman/discovery-helm
      SEQUENCE_NUMBER: ${{ github.run_number }}                           # workflow 생성 순번 - 이미지 tag 이름을 짓기 위해 필요요
      DOCKER_HUB_REGISTRY_NAME: ${{ secrets.DOCKER_HUB_REGISTRY_NAME }}   # docker hub 접속 url
      DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}                     # docker hub username
      DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}                     # docker hub password
    
    jobs:
    
      build:
    
        runs-on: ubuntu-latest
        
        steps:
        - uses: actions/checkout@v4
        - name: Set up JDK 21
          uses: actions/setup-java@v4
          with:
            java-version: '21'
            distribution: 'temurin'
            
        - name: Gradle Caching
          uses: actions/cache@v3
          with:
            path: |
              ~/.gradle/caches
              ~/.gradle/wrapper
            key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
            restore-keys: |
              ${{ runner.os }}-gradle-
    
        - name: Setup Gradle
          uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0
          with:
            gradle-version: '8.5'
        
        - name: Build with Gradle 8.5
          run: |
                cd discovery-service
                gradle clean build --exclude-task test
    
        - name: Set up Docker Buildx
          uses: docker/setup-buildx-action@v1
        
        - name: docker hub login
          run: echo "${{ env.DOCKER_PASSWORD }}" | docker login -u "${{ env.DOCKER_USERNAME }}" --password-stdin
        
        - name: Build the Docker image
          run: |
              cd discovery-service
              docker build -t woodpecker-msa-discovery-service .
              docker tag woodpecker-msa-discovery-service ${{ env.DOCKER_HUB_REGISTRY_NAME }}/woodpecker-msa-discovery-service:${{ env.SEQUENCE_NUMBER }}
    
        - name: Push Docker image to Docker Hub
          run: docker push ${{ env.DOCKER_HUB_REGISTRY_NAME }}/woodpecker-msa-discovery-service:${{ env.SEQUENCE_NUMBER }}
    
        - uses: actions/checkout@v4
          with:
            repository: ${{ env.TARGET_REPOSITORY }}
            token: ${{ env.GIT_TOKEN }}
        - uses: fjogeleit/yaml-update-action@main
          with:
            valueFile: 'values.yaml'
            value: ${{ env.SEQUENCE_NUMBER }}
            propertyPath: 'deployment.discovery.image.tag'
            message: 'ci: Update image tag to ${{ env.SEQUENCE_NUMBER }}'
            commitChange: true
            branch: main
            repository: ${{ env.TARGET_REPOSITORY }}
            token: ${{ env.GIT_TOKEN }}

     

    Github commit & push 하여 workflow 테스트

    성공했다면 argocd에서는 default로 설정했기 때문에 3분 후에 자동 적용한다.

    즉시 적용하고 싶다면 REFRESH를 클릭하자!

    728x90
    TOP