Установка Jenkins с помощью helm
kubectl create ns jenkins helm install --name jenkins --namespace jenkins stable/jenkins -f ./values-autosys.yaml
В результате в неймспейсе jenkins создадутся все нужные объекты, однако pod будет в состоянии pending, потому что у него отсутсвует PersistentVolume, запрашиваемый при помощи PersistentVolumeClaim.
values-autosys.yaml
master: Name: jenkins-master overwriteConfig: true # hostNetworking: true ingress: enabled: true # For Kubernetes v1.14+, use 'networking.k8s.io/v1beta1' apiVersion: "extensions/v1beta1" labels: {} annotations: cert-manager.io/cluster-issuer: letsencrypt kubernetes.io/ingress.class: nginx hostName: jenkins.autosys.tk tls: - hosts: - jenkins.autosys.tk secretName: jenkins-autosys-tk-tls persistence: enabled: true storageClass: jenkins
jenkins pod Init:0/1
Сразу после разворачивания pod jenkins у меня находился в состоянии Init:0/1, а в статусе pod'а можно обнаружить такое:
message: 'containers with incomplete status: [copy-default-config]'
В это время в поде jenkins'а работает контейнер copy-default-config, который скачивает с jenkins.io различные компоненты, необходимые для работы (плагины). Ход этого процесса можно наблюдать так:
kubectl logs -n jenkins jenkins-.... -c copy-default-config -f
В контейнере этот процесс выполняется скриптом: /var/jenkins_config/apply_config.sh
Создадим StorageClass и PersistentVolume
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: jenkins namespace: jenkins provisioner: kubernetes.io/no-provisioner reclaimPolicy: Retain volumeBindingMode: WaitForFirstConsumer --- apiVersion: v1 kind: PersistentVolume metadata: name: jenkins-pv namespace: jenkins labels: app: jenkins spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce storageClassName: jenkins hostPath: path: "/kubernetes_volumes/jenkins-home" type: Directory persistentVolumeReclaimPolicy: Retain
Пароль учетки admin
printf $(kubectl get secret --namespace jenkins jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
Jenkins URL
export SERVICE_IP=$(kubectl get svc --namespace default jenkins --template "{{ range (index .status.loadBalancer.ingress 0) }}{{ . }}{{ end }}") echo http://$SERVICE_IP:8080/login
Дадим права на создание pod'ов
kubectl create clusterrolebinding jenkins --clusterrole cluster-admin --serviceaccount=jenkins:default
Конфигурация после установки
После установки нужно как минимум сконфигурировать параметры Jenkins Location:
- Jenkins URL
- System Admin e-mail address
Discussion