미래의 CI / CD 구축, Jenkins 설치 및 구성

에서 개발 운영 엔지니어로이 튜토리얼에서는, 나는 내 경험을 공유 Cloudify.co은 , 이것이입니다 다섯 번째 포스트튜토리얼 내가 매일 젠킨스는 영구 볼륨을 사용 조타 장치, 구성과 젠킨스를 설치하는 방법을 설명합니다있는 백업.

미래 게시 게시물 의 CI / CD 구축 :

Jenkins는 무엇입니까?

Jenkins는 소프트웨어 빌드, 테스트, 제공 또는 배포와 관련된 모든 종류의 작업을 자동화하는 데 사용할 수있는 독립형 오픈 소스 자동화 서버입니다. https://jenkins.io/doc/

EKS 클러스터에 Jenkins 설치

Jenkins를 EKS 클러스터에 설치하기 위해이 helm 차트 와 사용자 지정 jenkins-values.yaml 을 사용하여 기본값을 재정의합니다.

jenkins-values.yaml 구성 검토

수신 정의

ingress:
    enabled: true
    apiVersion: "extensions/v1beta1"
    labels: {}
    annotations: 
      kubernetes.io/ingress.class: nginx
      cert-manager.io/cluster-issuer: "letsencrypt-prod"
    hostName: jenkins.eks.cicd-future.com
    tls:
      - secretName: jenkins-tls-prod
        hosts:
          - jenkins.eks.cicd-future.com

지원

## Backup cronjob configuration
## Ref: https://github.com/maorfr/kube-tasks
backup:
  # Backup must use RBAC
  # So by enabling backup you are enabling RBAC specific for backup
  enabled: true
  # Used for label app.kubernetes.io/component
  componentName: "backup"
  # Schedule to run jobs. Must be in cron time format
  # Ref: https://crontab.guru/
  schedule: "0 3 * * *"
  labels: {}
  annotations: {}
    # Example for authorization to AWS S3 using kube2iam
    # Can also be done using environment variables
    # iam.amazonaws.com/role: "jenkins"
  image:
    repository: "maorfr/kube-tasks"
    tag: "0.2.0"
  # Additional arguments for kube-tasks
  # Ref: https://github.com/maorfr/kube-tasks#simple-backup
  extraArgs: []
  existingSecret:
    jenkinss3:
      awsaccesskey: jenkins_aws_access_key
      awssecretkey: jenkins_aws_secret_key
  env:
  - name: "AWS_REGION"
    value: "eu-east-1"
  resources:
    requests:
      memory: 1Gi
      cpu: 1
    limits:
      memory: 2Gi
      cpu: 1
  destination: "s3://jenkins-backups"

이 메커니즘을 활성화하려면 '0 3 * * *'와 같은 cronjob 형식으로 백업 일정을 정의해야하고 kube2iam을 사용하여 s3 버킷에 액세스하려면 S3에 대한 액세스 권한이있는 AWS에서 특정 사용자를 생성해야합니다. 저처럼 AWS 사용자를 사용하는 경우이 사용자의 자격 증명 (aws_access_key / aws_secret_key)을 kubernetes 암호로 저장해야하는 경우 다음 명령을 실행하여 암호를 생성 할 수 있습니다.

$ kubectl create secret generic jenkinss3 /
--from-literal=jenkins_aws_access_key=ACCESS_KEY /
--from-literal=jenkins_aws_secret_key=SECRET_KEY

비밀 이름은 jenkinss3입니다.

이 메커니즘은 실패한 상태의 마지막 작업 3 개와 로그에 'Error in Stream : command terminated with exit code 1 src : file :'이 표시 될 때까지 몇 달 동안 작동했습니다 . 여기 에서이 문제에 대해 읽을 수 있습니다 . s3 버킷에 업로드하는 동안 / var / jenkins_home 폴더의 파일이 변경되면 오류가 발생합니다. 이 문제는 해결 되지 않았 으므로 내 해결책은 / var / jenkins_home 폴더를 보관하고 매일 s3에 업로드하는 이 간단한 예약 작업 을 빌드 하는 것이 었습니다.

이 솔루션에 대한 자세한 내용은 여기에서 읽을 수 있습니다 .

영구 볼륨

persistence:
  enabled: true
  ## A manually managed Persistent Volume and Claim
  ## Requires persistence.enabled: true
  ## If defined, PVC must be created manually before volume will be bound
  existingClaim:
  ## jenkins data Persistent Volume Storage Class
  ## If defined, storageClassName: <storageClass>
  ## If set to "-", storageClassName: "", which disables dynamic provisioning
  ## If undefined (the default) or set to null, no storageClassName spec is
  ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
  ##   GKE, AWS & OpenStack)
  ##
  storageClass:
  annotations: {}
  accessMode: "ReadWriteOnce"
  size: "8Gi"
  volumes:
  #  - name: nothing
  #    emptyDir: {}
  mounts:
  #  - mountPath: /var/nothing
  #    name: nothing
  #    readOnly: true

기본 스토리지 클래스를 사용합니다.

그렇지 않으면 선택하지 않으면 제 경우에는 AWS EBS입니다.

내가 사용중인 플러그인 세트

# List of plugins to be install during Jenkins master start
  installPlugins:
    - kubernetes:1.25.3
    - workflow-job:2.38
    - workflow-aggregator:2.6
    - credentials-binding:1.23
    - git:4.2.2
    - configuration-as-code:1.39
    - greenballs:1.15
    - google-login:1.6
    - github:1.29.5
    - blueocean:1.23.1

Jenkins가 Kubernetes 클러스터에 대해 인증 / 승인 되려면 서비스 계정을 만들어야합니다. 서비스 계정은 클러스터 역할에 바인딩되며 특정 클러스터 권한을 부여받을 수 있습니다.

jenkins-values.yaml에서 서비스 계정 생성을 활성화해야합니다.

serviceAccount:
  create: true
  name: jenkins
  annotations: {}

$ kubectl create clusterrolebinding jenkinsrolebinding --clusterrole=cluster-admin --group=system:serviceaccounts:jenkins

여기에서 RBAC 인증에 대해 자세히 알아볼 수 있습니다 .

Jenkins 네임 스페이스에 클러스터에 Jenkins 마스터 설치

Jenkins helm 차트에 대한 사용자 정의 values.yaml이 jenkins-values.yaml이라고 가정합니다.

kubectl create namespace jenkins

helm install jenkins -f jenkins-values.yaml stable/jenkins --namespace jenkins

printf $(kubectl get secret --namespace jenkins jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo

다음 게시물에서는 Jenkins에서 생성 된 서비스 계정을 사용하는 방법과 Kubernetes 클러스터의 모든 포드를 나열하는 간단한 파이프 라인 작업을 실행하는 방법을 보여 드리겠습니다.

결론

이 게시물에서는 Jenkins 설치 방법, 사용자 지정 구성 개요, 수신 규칙 구성 방법, 일일 백업 수행, 영구 볼륨을 사용하여 모든 데이터 저장, 내 플러그인 집합, 서비스 계정 생성 방법을 설명했습니다. Kubernetes 클러스터에 대한 액세스.

읽어 주셔서 감사합니다. 즐거웠기를 바랍니다. 다음 게시물에서 뵙겠습니다.

이 튜토리얼의 다음 게시물이 게시 될 때 알림을 받고 싶다면 여기 매체와 Twitter (@warolv) 에서 저를 팔로우하십시오 .

이 튜토리얼을 복제 할 개인 블로그 : http://igorzhivilo.com,이 자습서에서 만든 모든 구성을 Github (warolv)에 저장 합니다.

참고 문헌

https://github.com/warolv/jenkins-eks/blob/master/jenkins/jenkins-values.yaml

https://www.jenkins.io/doc/

https://github.com/jenkinsci/helm-charts/tree/main/charts/jenkins

https:///@warolv/building-the-ci-cd-of-the-future-nginx-ingress-cert-manager-945f3dc6b12e

https://github.com/maorfr/kube-tasks

https://github.com/jtblin/kube2iam

https://github.com/nuvo/kube-tasks/issues/2

https://gist.github.com/warolv/1dbe6efed66d3111decae825b7b73241

https:///swlh/simple-backup-for-jenkins-on-kubernetes-f24743de7499

👋 오늘 FAUN에 가입하고받은 편지함에서 매주 비슷한 이야기를 받아보세요! ️ 필독 해야 할 기술 이야기, 뉴스 및 튜토리얼을 매주 받으십시오.

Twitter 🐦 Facebook 👥 Instagram 📷 에서 팔로우 하고 FacebookLinkedin 그룹에 가입하세요 💬

이 게시물이 도움이 되었으면 아래의 박수 👏 버튼을 몇 번 클릭하여 저자에 대한지지를 보여주세요! ⬇

Suggested posts

Kubernetes 디버깅 및 로컬 개발에 Telepresence 2 사용

Kubernetes 디버깅 및 로컬 개발에 Telepresence 2 사용

Telepresence 2는 최근에 출시되었으며 (Telepresence 1과 같이) Kubernetes 도구 상자에 추가 할 가치가 있습니다. Telepresence는 일상적인 작업 흐름이 어떻게 개선되는지 발견 한 후에는 살 수없는 도구 중 하나입니다.

HashiCorp Consul을 사용하여 Kubernetes에서 Canary 배포

HashiCorp의 Consul Connect 및 Ingress Gateway 기능을 사용하여 새 애플리케이션 릴리스를 출시하는 방법에 대한 대화 형 가이드입니다.

HashiCorp Consul을 사용하여 Kubernetes에서 Canary 배포

소개 애플리케이션 팀이 고객 대면 애플리케이션의 새 버전을 배포하고 출시 할 준비가 된 시나리오를 그려보십시오. 개발자는 엄격한 테스트를 수행했지만 애플리케이션이 프로덕션에 도달하면 클라이언트는 의도 한대로 서비스를 사용하지 못하게하는 잡히지 않은 버그에 부딪 힙니다.