Есть много способов сделать то, что вы хотите сделать, как рулевые диаграммы, обновление шаблонов и т. Д.
Что я делаю, так это структурирую код:
├── .git
├── .gitignore
├── .gitlab-ci.yml
├── LICENSE
├── Makefile
├── README.md
├── src
│ ├── Dockerfile
│ ├── index.html
└── templates
├── autoscaler.yml
├── deployment.yml
├── ingress.yml
├── sa.yml
├── sm.yml
└── svc.yml
Файлы шаблонов Kubernetes будут иметь что-то вроде:
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-deployment
namespace: __NAMESPACE__
labels:
app: app
environment: __CI_COMMIT_REF_NAME__
commit: __CI_COMMIT_SHORT_SHA__
spec:
replicas: 1
selector:
matchLabels:
app: app
template:
metadata:
labels:
app: app
environment: __CI_COMMIT_REF_NAME__
commit: __CI_COMMIT_SHORT_SHA__
annotations:
"cluster-autoscaler.kubernetes.io/safe-to-evict": "true"
spec:
containers:
- name: app
image: <registry>/app:__CI_COMMIT_SHORT_SHA__
ports:
- containerPort: 80
Так что этот шаблон не изменится, если вы измените src
.
Затем в конфигурации CircleCI вы можете выполнить шаги по обновлению шаблона перед применением:
- sed -i "s/__NAMESPACE__/${CI_COMMIT_REF_NAME}/" deployment.yml service.yml
- sed -i "s/__CI_COMMIT_SHORT_SHA__/${CI_COMMIT_SHORT_SHA}/" deployment.yml service.yml
- sed -i "s/__CI_COMMIT_REF_NAME__/${CI_COMMIT_REF_NAME}/" deployment.yml service.yml
- kubectl apply -f deployment.yml
- kubectl apply -f service.yml
Переменные будут вам доступны или установлены в CircleCI.