공부목적 - git push -> ec2 -> deploy의 과정이 너무 길고 불편하였는데 이를 자동화하여 배포관련 시간을 줄이기 위한 목적
git에서 특정한 branch가 update(push 등..)이 발생할때마다 jenkins가 이를 자동으로 catch하여 빌드, 배포를 진행해주는것(현재 프리티어를 사용중인데 tomcat+docker+jenkins까지 사용하려고 하니 filesweap으로도 용량이 부족하여 로컬에서 진행한다..ㅠㅠ)
사전지식
CI (Continuous Integration) - 지속적 통합
CD (Continuous Delivery/Deployment) - 지속적 제공/배포
파이프라인 - CI/CD가 이뤄지는 일련의 과정 (스크립트)으로 커밋 -> 빌드 -> 테스트 -> 배포 -> 모니터링까지의 흐름
즉, CI와 CD가 이뤄지는 일련의 과정을 CI/CD 파이프라인이라 칭한다.
WebHook - git의 변동사항 확인
기본적인 코드 는 다음과 같다.
초기 코드
pipeline {
agent any
stages {
//빌드부분
stage('Build') {
steps {
echo 'Building...'
// sh 'mvn clean install'
}
}
//테스트부분
stage('Test') {
steps {
echo 'Testing...'
// sh 'mvn test'
}
}
//배포부분
stage('Deploy') {
steps {
echo 'Deploying...'
// sh 'scp target/my-app.jar user@server:/path/to/deploy/'
}
}
}
//성공 및 실패시
post {
success {
echo 'Pipeline completed successfully!'
}
failure {
echo 'Pipeline failed.'
}
}
이것을 변형하겠다.
해당 포스팅에선 배포를 진행하지 않고 로컬에 설정만 진행예정이며 다음 포스팅에서 배포까지 진행예정이다.
jenkins가 업데이트되어 UI가 사진과 다를경우도 종종있으니 참고할것
프로젝트 환경 설정하기
프로젝트 설정에 따라 gradle또는 maven을 선택하면 된다.
manage jenkins - plugin -maven 또는 gradle다운 (Gradle은 defulat로 설치되기에 maven을 다룬다)
문제없이 설치된경우 Manage Jenkins - Tools에서 gradle 또는 maven 관련 설정을 진행할수있다.
Name은 나중에 PipeLine 스크립트 작성시 사용예정
git 권한 생성하기
로컬 실행 기준
manege jenkins - Credentials - (Domains의) global 클릭
Global credentials 클릭
Add Credentials 클릭
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ여기서부터 gitㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
Git프로필 클릭 -> Settings -> Developer settings -> Personal access tokens -> Tokens(classic)
이름은 아무렇게나 짓기
repo 접근권한 + hook 접근권한 설정
토큰 발급후 다시 jenkins로 이동해서 password부분에 방금 복사한 code를 넣는다.
WEBHOOK 설정하기
Git의 자신이 jenkins에서 사용할 프로젝트 클릭 -> Setting -> WebHooks -> add Webhook
Content type을 json으로 바꾸며 URL은 다음과 같은 형태로 이뤄진다.
https://내 URL//github-webhook/
로컬에서 사용할 예정이기에 localhost를 입력하면 되는것 아니냐 했지만 실제로 진행해보면 에러가 나오는걸 확인할수있다.
이를 위하여 임시로 URL을 발급받아야하며 여기선 ngrok를 활용하여 진행하겠다.
Ngrok
https://dashboard.ngrok.com/get-started/your-authtoken
해당 사이트 회원가입 -> 토큰을 복사한다.
https://ngrok.com/download 이것도 다운받아놓자
토큰 복사후 방금 다운받은 ngrok exe를 실행하여 2번 코드를 입력한다
ngrok authtoken 발급받은authtoken //로컬에 내 토큰 저장 목적
ngrok http 젠킨스포트 //local:8080이면 그냥 ngrok http 8080 입력
정상적으로 완료했다면 다음과 같은 형태의 URL이 나타나며 포워딩된 url을 입력하면 내 local로 연결되는걸 확인할수있다. (처음 방문시 visit이라는 아이콘을 클릭 해야할수도 있다)
해당 URL을 아까 git에 입력해주고 결과를 확인해본다.
만일 403 crumb 에러가 나올경우 해당 링크를 참고할
https://honeyinfo7.tistory.com/293
PipeLine 코드
pipeline {
agent any
tools {
maven 'Maven_PLUS' // Maven 도구 이름
}
environment {
JAVA_HOME = 'C:\\Program Files\\Eclipse Adoptium\\jdk-21.0.3.9-hotspot'
PATH = "${env.JAVA_HOME}\\bin;${env.PATH}"
}
stages {
stage('Checkout') {
steps {
// Git 레포지토리에서 코드를 가져오는 단계
git branch: 'master',
credentialsId: 'deploy-ssh-credentials-id',
url: 'https://github.com/myname/projectname.git'
}
}
stage('Build') {
steps {
// Maven을 사용하여 빌드
bat "\"${tool 'Maven_PLUS'}\\bin\\mvn\" clean package"
}
}
stage('Test') {
steps {
// Maven을 사용하여 테스트 실행
bat "\"${tool 'Maven_PLUS'}\\bin\\mvn\" test"
}
}
}
}
설정이 완료되었으며 build now 아이콘을 클릭해 실행하며 결과는 PipeLine Console에서 확인이 가능하다
'Spring' 카테고리의 다른 글
@ResponseBody @RequestBody (0) | 2024.09.15 |
---|---|
타임리프 css 미적용 문제 + redirect 문제 (0) | 2024.08.31 |
젠킨스 로컬에서 자동화하기 - 2 (0) | 2024.06.22 |
젠킨스 관련 에러 내용 (crumb, 용량부족) (0) | 2024.06.16 |
Jmeter - 2 (0) | 2024.06.12 |