Como seguimiento del blog. https://blogs.sap.com/2023/02/02/sap-cpi-ci-cd-from-from-zero-to-hero/, Recibí comentarios muy valiosos de que debería probar el proyecto Piper.
Quería probar piper en Kyma, dado que ya tenemos nuestras canalizaciones y bibliotecas compartidas personalizadas, así que seguí esta opción con la esperanza de poder tener tanto a piper como a nuestras canalizaciones trabajando en el mismo contenedor, por lo que creo que es lo más valioso. escenario para nuestro equipo.
Piper documentación (https://www.project-piper.io/infraestructura/overview/) cataloga la implementación en kubernetes como experimental, así que asegúrese de probarla correctamente si está usando esto como su entorno productivo. También un descargo de responsabilidad: no soy ningún experto en Kyma o Piper (fue mi primera exposición a ambos), así que tal vez tuve un mal viaje debido a la falta de conocimiento, lo cual es justo. Sin embargo, creo que todo el proceso podría documentarse mejor, así que espero que este blog llame la atención para que alguien pueda contribuir a mejorar la documentación en un procedimiento paso a paso.
Verificó la documentación oficial que apunta al uso de gráficos de timón para instalarlo en Kyma. Según tengo entendido, los gráficos de timón son solo recetas altamente configurables para importar todos los recursos de kyma/kubernetes a través de archivos yaml. Luego puede anular los valores durante la instalación desde gráficos a través de la línea de comandos o mediante un archivo de anulación adicional.
Si sigue el enlace para el gráfico de timón, accederá a una página con un repositorio de github en desuso. El gráfico de helm obsoleto tiene un valor Master.Image que puede proporcionar, pero no pude determinar la URL de este repositorio obsoleto para agregarlo a través de «helm add repo piperofficial
Si sigue el enlace al nuevo gráfico de timón, llegará aquí (https://github.com/jenkinsci/helm-charts). Pude agregar el repositorio con comando
helm repo add jenkins https://charts.jenkins.io
luego para instalarlo a través de
.\helm.exe install devops jenkins/jenkins --set namespaceOverride=piper
Luego, tuve que crear una regla API para exponer el servicio que se generó pero que pude autenticar. Problema: La imagen es la imagen estándar de jenkins/jenkins sin piper lib instalada. Si además de esto tuviera que instalar todos los complementos de jenkins y piper lib manualmente, sería demasiado esfuerzo, así que eliminé todo y lo intenté de nuevo, pero esta vez anulando la imagen y la etiqueta del gráfico de helm a la de piper.
.\helm.exe install devops jenkins/jenkins --set namespaceOverride=piper --set controller.image=ppiper/jenkins-master --set controller.tag=latest
Todo se desplegó pero la cápsula no arrancó… ¿Por qué?
Los registros del pod mencionan problemas con las dependencias del complemento jenkins… Lo último que quiero tratar es con las discrepancias de la versión de las dependencias. Por lo que entiendo, la imagen de la ventana acoplable ppiper/jenkins-master y jenkins/jenkins (para los que se preparó el gráfico de helm) usan diferentes versiones de tiempo de ejecución de Jenkins y tienen diferentes complementos instalados, lo cual es normal, pero me llevó a concluir que esto no funcionaría sin una más profunda busque resolver estos problemas de dependencias/versiones/compatibilidad. Si ha encontrado una manera sencilla de hacerlo a través de este enfoque, hágame saber qué pasos ha seguido en los comentarios.
Renuncié a usar la documentación oficial y la única solución que me funcionó fue crearla desde cero en Kyma. A continuación, puede encontrar los artefactos que he creado (he usado una implementación con un ReplicaSet que tiene un volumen en el hogar de jenkins que apunta a PersistentVolumeClaims en lugar de usar el enfoque StatefulSet que usa el gráfico de timón).
apiVersion: v1
kind: Namespace
metadata:
name: piper
labels:
app.kubernetes.io/name: piper
istio-injection: enabled
kubernetes.io/metadata.name: piper
spec:
finalizers:
- kubernetes
status:
phase: Active
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: piperpvc
namespace: piper
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: piperapp
namespace: piper
labels:
app: piperapp
spec:
replicas: 1
selector:
matchLabels:
templatename: piperapp
template:
metadata:
labels:
templatename: piperapp
app: piperapp
spec:
containers:
- name: pipercontainer
image: ppiper/jenkins-master
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
imagePullPolicy: Always
volumeMounts:
- name: jenkins-volume
mountPath: /var/jenkins_home
volumes:
- name: jenkins-volume
persistentVolumeClaim:
claimName: piperpvc
securityContext:
runAsUser: 1000
runAsGroup: 1000
fsGroup: 1000
restartPolicy: Always
terminationGracePeriodSeconds: 30
dnsPolicy: ClusterFirst
schedulerName: default-scheduler
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
revisionHistoryLimit: 10
progressDeadlineSeconds: 600
---
kind: Service
apiVersion: v1
metadata:
name: piperappserv
namespace: piper
labels:
app: piperapp
spec:
ports:
- protocol: TCP
port: 80
targetPort: 8080
selector:
app: piperapp
type: ClusterIP
sessionAffinity: None
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
internalTrafficPolicy: Cluster
status:
loadBalancer: {}
---
apiVersion: gateway.kyma-project.io/v1beta1
kind: APIRule
metadata:
finalizers:
- gateway.kyma-project.io/subresources
labels:
app: piperapp
name: piperapirule
namespace: piper
spec:
gateway: kyma-gateway.kyma-system.svc.cluster.local
host: piperapihost
rules:
- accessStrategies:
- config: {}
handler: noop
methods:
- GET
- POST
- PUT
- DELETE
- OPTIONS
- PATCH
path: /.*
service:
name: piperappserv
port: 80
Para aplicarlo, suponiendo que tiene un archivo llamado fullaml.yaml con el contenido anterior, simplemente ejecute:
kubectl apply -f fullyaml.yaml
Probé esta imagen y pude ejecutar comandos piper y forzar la terminación de los pods para garantizar que se guardó el estado.
Pude ejecutar Piper IntegrationArtifactDeploy y funcionó sin problemas. Ahora, si quiero usar nuestras bibliotecas compartidas actuales con el enfoque de acciones de github, necesitaría:
Como puede ver, mi viaje de instalación no fue fácil, no estoy seguro si se debió a mi falta de conocimiento sobre Kyma, a la documentación que no era tan buena o a ambos. Para ser justos, pude usarlo en las instalaciones con el servidor cx, que también es el enfoque recomendado, pero estaba pensando que si invertimos en migrar a piper, también deberíamos deshacernos de los costos de mantenimiento de nuestro servidor en las instalaciones. No estoy seguro de si hay una forma de usar el servidor cx en Kyma. Si tienes experiencia con eso por favor comenta.
Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010
Paseo de la Reforma 26
Colonia Juárez, Cuauhtémoc
Ciudad de México 06600
Real Cariari
Autopista General Cañas,
San José, SJ 40104
Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073