CI/CD

Jenkins Back-End Gradle Build

uuuhhh 2022. 12. 13. 09:54

👀 Epilogue


  • 백엔드 Gradle 빌드 시 매우 많은 트러블 이슈 발생
    • Gradle 빌드 명령어 이슈..
      • Test 제외 빌드 명령어
      • ./gradlew build --exclude-task -test

Java Build 과정 -> 여기서 Test 과정을 제외

 

  • Gradle 빌드 세팅 파일 찾지 못하는 이슈..
  • Gradle 권한 오류..
  • etc..
  • 그중에서 제일 애를 먹었던 이슈를 해결했던 과정을 소개하고자 한다.

 

⚡ Leggo


  • Jenkinsfile
...

stage('Gradle Jar Build'){
            steps{
                dir('back'){
                    sh '''
                        chmod +x gradlew
                        ./gradlew build --exclude-task test
                    '''
                }
            }
            post{
                failure{
                    echo 'Gradle jar build failure!'
                }
                success{
                    echo 'Gradle jar build success!'
                }
            }
        }
        
...

 

  • 'Gradle build daemon disappeard unexpectedly (it may have been killed or may have crashed)' 에러 문구 발생

 

 

PyeongHo Factory

즐거운 공장

pyeongho.github.io

  • 위 블로그 글처럼 Gradle 옵션에 no-daemon 추가하여도 똑같은 에러 발생으로 Agent Pod의 스펙이 부족한가 의심됨

 

  • 현재 Agent pod의 스펙은 다음과 같이 로그에 나타난다.

 

  • 빌드 로그에서 빌드 데몬이 메모리가 494.9 MiB를 사용한다는 것(?)으로 유추할 수 있는 로그를 확인하였다.
    • 이를 통해 Agent Pod의 스펙이 부족함으로 나타나는 에러 발생으로 생각이 굳혀져 갔다.

 

  • 현재 젠킨스를 Helm으로 Kubernetes에 구축한 환경이라 Jenkins 내 시스템 설정에서 Agent 파드를 설정하는 파트가 존재하지 않았다..
  • 방법을 강구하던 도중 Jenkins Helm Chart Value 파일을 살펴보았다.

 

  • [agent.resources] 필드가 존재하였다 !
    • 바로 메모리 두 배 스펙업 고고링
    • helm upgrade jenkins jenkins/jenkins -f jenkins-values.yaml -n jenkins
agent:
  enabled: true
  defaultsProviderTemplate: ""
  # URL for connecting to the Jenkins contoller
  jenkinsUrl:
  # connect to the specified host and port, instead of connecting directly to the Jenkins controller
  jenkinsTunnel:
  kubernetesConnectTimeout: 5
  kubernetesReadTimeout: 15
  maxRequestsPerHostStr: "32"
  namespace:
  image: "jenkins/inbound-agent"
  tag: "4.11.2-4"
  workingDir: "/home/jenkins/agent"
  nodeUsageMode: "NORMAL"
  customJenkinsLabels: []
  # name of the secret to be used for image pulling
  imagePullSecretName:
  componentName: "jenkins-agent"
  websocket: false
  privileged: false
  runAsUser:
  runAsGroup:
  hostNetworking: false
  resources:
    requests:
      cpu: "512m"
      memory: "1024Mi"
    limits:
      cpu: "512m"
      memory: "1024Mi"

 

  • 정의한 스펙이 적용된 것을 확인

 

  • 아시죠 ?
    • 뭔가 감이 오잖아요
    • 될 것 같은 이 기분..
    • 에러 로그랑 그냥 시작부터 다르다는 것을..
    • 성공 !!!!!!! 😭

 

 

  • 참고
  • Back-End JAR file PATH
    • /home/jenkins/agent/workspace/test-backend/demo/build/libs/demo-0.0.1-SNAPSHOT.jar
    • java -jar demo-0.0.1-SNAPSHOT.jar