1 . 백엔드 코드 수정 및 변경
//@SpringBootTest
Jenkins에서 개발코드가 있는 git을 checkout할때 git전체에 대해서만 url을 등록할 수 있고, git에서 내가 빌드하길 원하는 코드가 있는 디렉터리만을 등록할 수 없었다. 따라서 그냥 해당 디렉터리에 있는 모든 파일들을 루트 디렉터리로 가져왔다.
-> 나머지 디렉터리는 모두 삭제하고, 관계없는 파일 또한 삭제하였다.
-> 그리고 git을 등록하니 정상적으로 checkout해서 빌드하였다
사실 이렇게하면 필요한 디렉터리나 파일들이 삭제되는 경우가 발생할 것이고, 루트 디렉터리에서 모든 파일이 존재하다보니 관리가 어려울 것이다. 따라서 개발 코드를 디렉터리별로 관리하고 git을 등록할때도 그냥 전체 git주소를 등록하면 된다. 다만 아래와 같이 Pipeline코드를 짤때 빌드하길 원하는 git의 디렉터리를 지정해주면 된다.
dir('backend/spring'){ # 특정 디렉터리 지정
sh 'gradle wrapper --gradle-version 8.0.2'
}
2 . Jenkinsfile 작성
pipeline{
agent{
kubernetes{
yaml '''
apiVersion: v1
kind: Pod
spec:
containers:
- name: gradle
image: gradle:8.0.2-jdk11
command: ['sleep']
args: ['infinity']
- name: kaniko
image: gcr.io/kaniko-project/executor:debug
command: ['sleep']
args: ['infinity']
volumeMounts:
- name: registry-credentials
mountPath: /kaniko/.docker
volumes:
- name: registry-credentials
secret:
secretName: regcred
items:
- key: .dockerconfigjson
path: config.json
'''
}
}
stages{
stage('checkout'){
steps{
container('gradle'){
git branch: 'main', url:'https://github.com/suhwan12/GoormUniversity-course-registration.git'
} # 루트 디렉터리에 다 모아놓고 git주소를 등록
# 루트 디렉터리에 모아놓지 않아도 dir로 빌드하길 원하는 디렉터리 지정 가능
}
}
stage('install gradlew'){ # gradlew 설치
steps{
container('gradle'){
sh 'gradle wrapper --gradle-version 8.0.2'
}
}
}
stage('gradle build project'){ # build와 libs 디렉터리 생성 및 jar파일 생성
steps{
container('gradle'){
sh './gradlew build'
}
}
}
stage('Build & Tag dokcer image'){ # Dockerfile 빌드
steps{
container('kaniko'){
sh "executor --dockerfile=Dockerfile \
--context=dir://${env.WORKSPACE} \
--destination=suhwan11/backend:latest \
--destination=suhwan11/backend:${env.BUILD_NUMBER}"
}
}
}
stage('Update K8s to New Deployment'){ # 새로운 이미지로 교체
steps{
container('gradle'){
git branch: 'main' , url:'https://github.com/suhwan12/finalproject-argocd.git'
sh 'sed -i "s/image:.*/image: suhwan11\\/backend:${BUILD_NUMBER}/g" back-deployment.yaml'
sh 'git config --global user.name suhwan12'
sh 'git config --global user.email xman0120@naver.com'
sh 'git config --global --add safe.directory /home/jenkins/agent/workspace/suhwan-test-pipe'
sh 'git add back-deployment.yaml'
sh 'git commit -m "Jenkins Build Number - ${BUILD_NUMBER}"'
withCredentials([gitUsernamePassword(credentialsId: 'github-credentials', gitToolName: 'Default')]) {
sh 'git push origin main'
}
}
}
}
}
}
sh 'git config --global --add safe.directory /home/jenkins/agent/workspace/suhwan-test-pipe'
3 . Dockerfile 작성
FROM openjdk:11-jre
WORKDIR /usr/src/
COPY . /usr/src/
CMD ["java","-jar","/usr/src/build/libs/api-0.0.1-SNAPSHOT.jar"]
4 . 결과 테스트