위와 같은 내용들을 순차적으로 글로써 적어보고자 합니다.
Continuous Integration..? 무엇을 통합한다는 뜻일까요? 바로 '코드'를 통합한다는 뜻인데 여기서 '코드'란 여러 개발자들의 코드베이스를 말합니다. 여러 개발자들이 계속해서 생산해내고 있는 코드들을 통합해주는 것을 CI라고 부르는 것이죠.
그렇다면 CD 에서의 'delivery'는 무엇을 뜻할까요? 계속해서 무언가를 배달한다는 것인데...
여기서의 배달은 사용자에게 제품 또는 서비스를 지속적으로 배달하는데서의 배달을 의미합니다. 개발자들이 생산해내는 코드를 통합해 항상 배포가능한 상태를 유지하는 것을 의미하죠.
또는 CD 를 'Continuous Deployment' 라고도 합니다. 코드베이스를 사용자가 사용가능한 환경에서 배포하는 것을 자동화하는 것을 의미하기도 합니다.
정리를 하자면, CI/CD라는 것은 각각의 개발자들이 개발을 하는 개발 환경을 사용자가 사용 가능한 서비스로 전달하는 모든 과정을 지속 가능한 형태로 또 가능하다면 자동으로 개발자와 사용자 사이의 격차를 없애는 것이라고 할 수 있습니다. 이러한 과정에는 코드를 빌드, 테스트, 배포하는 활동들을 포함합니다.
[내용필요]
Jenkins 하면 떠오르는 이 아저씨... 한번쯤은 보셨을 겁니다. 집사의 모습을 하고 있는데, 다 이유가 있습니다. 우리가 소프트웨어 개발을 하는데 있어서 주요한 개발 외에 여러가지 잡다한 일들을 바로 이 Jenkins 가 담당해서 하는 것이죠.
Jenkins는 기본적으로 Java Runtime 위에서 동작하는 자동화 서버로, 빌드, 테스트, 배포 등 모든 것을 자동화 해주는 자동화 서버입니다.
Jenkins의 플러그인은 정말 많습니다. 대표적인 플러그인들은 아래와 같습니다.
처음에는 그냥 추천해주는 것을 설치하면 왠만한 파이프라인을 구성할 수 있게 됩니다.
파이프라인이란 CI/CD 파이프라인을 젠킨스에 구현하기 위한 일련의 플러그인들의 집합이자 구성을 의미합니다. 즉, 여러 플러그인들을 이 파이프라인에서 용도에 맞게 사용하고 정의함으로써 파이프라인을 통해 서비스가 배포되는 것이지요.
파이프라인에는 여러 섹션들이 있는데요,
위와 같이 크게 4개의 섹션들로 구성이 되어 있습니다.
Agent section
Agent section은 여러 Jenkins instance 중 어떤 jenkins에게 일을 시킬 것인지 결정하는 부분입니다. 여러 Slave node를 두고 일을 시킬 수도 있고, jenkins 노드 관리에서 새로 노드를 띄우거나 혹은 docker 이미지등을 통해 처리할 수도 있습니다.
Post section
Post section에서는 스테이지가 끝난 이후의 결과에 따라서 후속 조치를 취할 수 있습니다. 각 단계가 끝날때마다 성공했으면, 혹은 실패했으면 어떤 일을 해라. 이런식으로 말이죠.
post {
// If maven was able to run the tests, even if some of the test failed, record the test results and archive the jar file.
success:
echo 'success'
}
위와 같이 성공했을 때 콘솔로 무엇을 찍는다던지, 슬랙채널에 메시지를 전송하던지 등의 역할을 할 수 있습니다.
Stages section
Stages section 에서는 어떤 일들을 처리할 것인지 일련의 stage를 정의합니다. 실제로 빌드에 대한 스크립트 내용을 이쪽에 기술하여 순차적으로 빌드가 진행되게끔 하는 메인 파트라고 보시면 됩니다.
Steps section
Steps Section은 한 스테이지 안에서의 단계로 일련의 스텝들을 보여주는 파트입니다.
Declaratives
Declaratives 란 위 여러 섹션들 외에도 환경변수, 파라미터 등 변수 혹은 어떤 조건과 같은 것들을 묶어서 표현하는 개념이라고 생각하시면 됩니다. 아래와 같은 declarative를 보면,
등 여러 declaratives가 있습니다.
다음 글에서는 실제로 젠킨스를 서버에 설치하고 간단한 프로젝트의 CI/CD를 구축해보겠습니다.