1. CI/CD 란
- CI(Continuous Integration) : 여러 개발자들의 코드를 계속해서 통합하는 것.
- CD(Coutinuous Delivery) : 개발자들이 코드를 계속 작성하면, 사용자 및 내부 사용자들(즉, QA 등등)이 계속 쓸 수 있게 만드는 것
지속적으로 배포가능한 상태를 유지하는 것
2. Jenkins 란
- Java Runtime 위에서 동작하는 자동화 서버
- 다양한 플러그인을 종합해서 CI/CD Pipeline을 만들어서 자동화 작업
- 예를 들어 로컬에서 개발 -> 커밋 -> 푸시 하면 정해진 파이프라인을 따라 빌드, 테스트 등을 하여 배포시키는 것!
Pipeline
- Agent Section : 여러 Slave를 두고 작업을 할 때 어떤 젠킨스가 어떤 일을 할지 지정한다.
- Post Section : 각 스테이지가 끝난 후 후속 조치 설정 (ex. success, failure, always, cleanup..)
- Stages Section : 어떤 일들을 처리할 건지 일련의 Stage를 정의함. 일종의 카테고리
- Declaratives : Enviroment -> 어떤 Pipeline이나 stage scope 의 환경 변수 설정
Parameter -> 파이프라인 실행시 파라미터 받음
Triggers -> 어떤 형태로 트리거 되는가
When -> 언제 실행되는가 ( ex. 맨처음에만 변수 설정하고 그 뒤에는 분기문을 둬서 안해도 되게)
- Steps : 여러 작업들을 실행 가능
pipeline {
agent any // 어떤 Jenkins한테 일을 시킬꺼야
stages {
stage('Prepare') {
steps { // Prepare에서 해야할 일들
git url : 'https://github~~~',
branch : 'master'
credentialsId : 'jenkinsgit'
sh 'ls'
dir ('./docs'){
sh '''
aws s3 sync ./ s3://test
'''
}
}
post {
success {
echo 'success'
}
}
}
}
stage ('Build') {
steps {
echo 'Building...'
}
}
}
}
Jenkins Plugin
- Credentials Plugin
- 각종 중요정보 (AWS Token, Git access token, etc...) 을 저장하고 있음
- RSA 기반의 고유 아이디로 공개키 방식을 암호화 시켜서 보안에 안전하다.
- 일반적으로 Private Network안에서 실행해서 안전한 편.
배포 환경 관리
- AWS System manager의 parameter store와 같은 곳에서 키 관리 서비스 쓰면 좋음
- 개발/통테/운영기에서 다른게 보통 url, db 패스워드 등등이 다르니까 해당 서버에 알맞게 Jenkins가 파라미터를 가져다 쓰는게 핵심
참고자료
https://www.youtube.com/watch?v=JPDKLgX5bRg