DevOps/CI|CD (11) 썸네일형 리스트형 젠킨스로 CI/CD 구현하기 젠킨스로 CI/CD 구현하기 젠킨스를 이용하여 CI/CD를 구성해보자 아이템(item)이란 새롭게 정의할 작업을 의미한다. CI/CD를 하려면 각각의 작업은 모두 필요하다. 만약 작업을 코드로 정의한 경우라고 해도 작업순서 정도는 알려줘야 한다. Freestyle project 스타일의 자유도가 높은 방식으로, 브라우저에서 사용자가 직접 설정값과 수행할 동작을 입력할 수 있다. 화면에 보이는 항목을 입력하면서 구성할 수 있어서 젠킨스와 관련된 경험이 부족한 사용자도 구성하기 쉽다는 장점이 있다. 하지만 과정이 복잡한 작업을 구성하기 어렵고, Freestyle로 생성한 아이템은 입력한 항목의 명세서를 별도로 저장하는 과정이 없으므로 작성한 내용을 공유하기 어렵다. Pipeline 젠킨스에서 지원하는 고유의.. 젠킨스 서비스어카운트(serviceaccount,sa)를 위한 권한 설정하기 jenkins 서비스 어카운트를 위한 권한 설정하기 실제로 젠킨스 에이전트 파드에서 쿠버네티스 API 서버 통신하려면 서비스 어카운트에 권한을 줘야한다. $ kubectl get serviceaccounts -n jenkins $ kubectl apply -f clusterrolebinding.yaml clusterrolebinding.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: jenkins-cluster-admin roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind:.. 쿠버네티스에서 젠킨스 에이전트 구성 쿠버네티스에서 젠킨스 에이전트 구성 젠킨스 노드 관리 홈 화면에서 젠킨스 관리 > 노드 관리 메뉴로 이동한다. 신규 노드 에이전트 노드를 추가한다. 고정된 여러 대의 서버에서 에이전트 노드를 추가해야 할 때 필요하다. Configure Cloud 클라우드 환경 기반의 에이전트를 설정할 때 필요하다. 쿠버네티스 위에 설치된 젠킨스의 에이전트에 관한 설정도 이 메뉴에서 설정할 수 있다. Node Monitoring 에이전트 노드의 안정성을 위한 각종 모니터링과 관련된 사항을 설정할 수 있다. 노드 목록 현재 구성된 노드의 목록을 보여준다. 쿠버네티스상에 설치한 젠킨스는 작업이 진행될 때만 파드 형태의 에이전트가 생성되고 작업이 끝나면 파드가 사라지기 때문에 작업중이 아니라면 이 목록에는 젠킨스 컨트롤러 노드.. 젠킨스 플러그인 관리하기 - 쿠버네티스(kubernetes) 플러그인 설치하기 젠킨스는 실행되는 모든 기능을 플러그인으로 구현하도록 설계되어있다. 이렇게 설치한 플러그인들을 단독으로 사용하거나 여러개를 조합해 더 강력한 CI/CD 기능을 만들 수 있다. 이런 예로 쿠버네티스 위에 에이전트 파드를 설정할 수 있게 도와주는 메뉴인 Kubernetes 플러그인이 있다. 업데이트된 플러그인 목록 젠킨스에 설치된 플러그인 중에 업데이트된 플러그인이 있는 경우 최신 버전으로 올릴 수 있다. 이때 업데이트를 할 수 없는 플러그인은 보안 취약점이 발견 됐거나 플러그인의 버전이 젠킨스 호환 버전이 아닌 경우에는 설치할 수 없다. 설치 가능 설치되지 않은 플러그인을 검색해 현재 젠킨스에서 해당 기능을 추가할 수 있다. 설치된 플러그인 목록 현재 젠킨스에 설치돼 있는 플러그인 정보를 확인할 수 있으며.. 젠킨스 컨트롤러 설정하기(환경설정) 젠킨스 컨트롤러 설정하기 # 젠킨스 시스템 설정하기(환경설정) 시스템 메세지 젠킨스 메인 웹 페이지에 접속했을 때 나타나는 메시지를 입력한다. 이 메시지를 통해 사용자에게 젠킨스에 대한 소개나 간단한 안내를 할 수 있다. # of executor 동시에 빌드를 수행할 수 있는 실행기의 개수를 설정하는 옵션으로서 이 옵션은 컨트롤러 노드에서 몇 개 까지의 빌드를 실행할 수 있을지 설정할 수 있다. 현재 설치된 젠킨스의 경우 에이전트 파드를 통해 빌드 작업을 생성하므로 이 옵션을 0으로 설정하는것이 바람직하다. Label 노드를 구분할 수 있는 레이블을 지정한다. 이렇게 설정한 레이블을 통해 Usage 옵션을 사용하면 특정 작업을 어떤 노드에서 작업할지 결정할 수 있다. Usage 젠킨스의 빌드 작업에 대해.. 젠킨스 살펴보기 젠킨스를 직접 접속해서 살펴보기에 앞서 현재 설치된 젠킨스의 구조를 간단히 살펴보자. 젠킨스 컨트롤러는 마스터 노드에 설치했지만 젠킨스 에이전트는 필요시에 생성되고 작업을 마치면 삭제되는 임시적인 구조를 가진다. 따라서 젠킨스 에이전트 작업 내용들은 삭제 전에 젠킨스 컨트롤러에 저장되어야 하며, 이를 위해 젠킨스 에이전트 서비스가 항상 동작하고 있다. kubectl get service 명령으로 현재 젠킨스 에이전트 서비스를 확인할 수 있다. $ kubectl get service 젠킨스 컨드롤러를 단독으로 설치할 경우에는 컨트롤러가 설치된 서버에서 젠킨스 자체 시스템 관리, CI/CD 설정, 빌드 등의 작업을 모두 젠킨스 컨트롤러 단일 노드에서 수행한다. 하지만 컨트롤러-에이전트 구조로 설치할 경우 컨.. 커스터마이즈로 배포 간편화하기 (MetalLB 구성) 커스터마이즈의 작동 원리 커스터마이즈를 통한 배포는 kubectl에 구성돼 있는 매니페스트를 고정적으로 이용해야하는 기존 방식을 유연하게 만든다. 우선 커스터마이즈가 어떻게 작동하는지 간단하게 살펴보자. 커스터마이즈는 야믈파일에 정의된 값을 사용자가 원하는 값으로 변경할 수 있다. 쿠버네티스에서 오브젝트에 대한 수정사항을 반영하려면 사용자가 직접 야믈 파일을 편집기 프로그램으로 수정해야한다. 일반적으로 이런 방식으로 수정했을 때 큰 문제가 발생하지 않는다. 그런데 만약 수정해야하는 야믈파일이 매우 많거나 하나의 야믈파일로 환경이 다른 여러 개의 쿠버네티스 클러스터에 배포해야해서 LABEL이나 NAME 같은 일부 항목을 수정해야 한다면 매번 일일이 고치는 데 많은 노력이 든다. 커스터마이즈는 이를 위해 k.. 젠킨스 설치를 위한 간편화 도구 Nginx 애플리케이션을 사용하려면 디플로이 먼트를 생성하고 이를 서비스로 노출하는 오브젝트 생성 과정을 총 두번 진행해야 했다. 그런데 이런 적은 수의 오브젝트로 모든 종류의 애플리케이션을 사용자가 사용할 수 있는 형태로 구현할 수 있을까? 그렇지 않다. 필요에 따라서 다수의 오브젝트를 사용해야 하는데, 우리는 수많은 오브젝트를 한번에 생성하는 매니페스트를 실행한적이 있다. MetalLB 구동하는 데 필요한 수많은 오브젝트를 미리 정의된 하나의 매니페스트에 넣고 바로 실행했다. 모든 환경에서 단순히 오브젝트를 정의한 대로만 사용한다면 젠킨스나 커스터마이즈, 헬름 등은 알 필요가 없다. 그러나 사용자마다 필요한 환경적 요소가 모두 다르므로 이를 요구 사항에 맞게 바꾸어야한다. 쿠버네티스 클러스터 환경에서.. 컨테이너 인프라 환경에서 CI/CD 컨테이너 인프라 환경에서는 주로 CD를 강조하지만, CI와 CD는 대부분 함께 사용되기 때문에 CI/CD의 개념을 정확히 이해해야한다. 일반적으로 CI는 코드를 커밋하고 빌드했을 때 정상적으로 작동하는지 반복적으로 검증해 애플리케이션의 신뢰성을 높이는 작업이다. CI 과정을 마친 애플리케이션은 신뢰할 수 있는 상태가 된다. CD는 CI 과정에서 생성된 신뢰할 수 있는 애플리케이션을 실제 상용 환경에 자동으로 배포하는것을 의미한다. 애플리케이션을 상용 환경에 배포할 때 고려해야 할 사항이 여러가지 있는데, 이를 CD에 미리 정의하면 실수를 줄이고 실제 적용 시간도 최소화 할 수 있다. CI/CD를 컨테이너 인프라 관점에서 정리해보자. 개발자가 소스를 커밋(commit) 하고 푸시(push)하면 CI 단계로.. 통합 및 배포 자동화 통합 및 배포 자동화 컨테이너 인프라 환경에서 쿠버네티스를 사용하는 이유는 컨테이너 애플리케이션을 유연하고 빠르게 배포하고 운영하기 위해서이다. 그렇다면 컨테이너로 구동하는 애플리케이션을 어떻게 배포하는 것이 가장 좋을까? 현재까지 진행한 과정은 다음과 같다. 깃허브 등의 저장소에 저장해 둔 애플리케이션 소스 코드를 내려받아 도커 컨테이너 이미지로 빌드한다. 빌드한 컨테이너 이미지를 쿠버네티스에서 사용할 수 있도록 레지스트리에 등록한다. 레지스트리에 등록된 이미지를 기반으로 쿠버네티스 오브젝트를 생성한다. 생성한 오브젝트(파드/디플로이먼트)를 외부에서 접속할 수 있도록 서비스 형태로 노출한다. docker build > docker push > kubectl create > kubectl expose 이.. 이전 1 2 다음