我们有时希望在部署新版本应用程序之前运行一些数据库迁移作业。ArgoCD 中的常见方法似乎是使用 PreSync 挂钩,我已经测试过它并且似乎有效,但我发现它在功能方面有点有限,并且不确定我是否遗漏了某些内容或如果事情就是这样的话。
我希望它的工作方式是仅在数据库迁移作业以某种方式发生更改(很可能是新映像)时才运行,但是预同步作业的设计方式(并且可以理解)是始终运行每次同步时指定作业。从功能上来说,这很好,迁移作业将需要约 20 秒的时间来启动和完成,最终什么也不做,但是对于每个不相关的更改都发生这种情况显然并不理想。
我希望有某种方法可以实现我所缺少的“ArgoCD 本机”。
我当前使用的作业模板(并且运行每次同步)是这样的:
{{- define "project.migration_job" -}}
{{- $appsettings := (get .Values.global.apps .name) }}
---
apiVersion: batch/v1
kind: Job
metadata:
generateName: {{ .name }}-
annotations:
argocd.argoproj.io/hook: PreSync
spec:
template:
spec:
automountServiceAccountToken: false
containers:
- name: {{ .name }}
image: "{{ .Values.global.repo }}/{{ .name }}:{{ $appsettings.image }}"
resources:
requests:
memory: {{ $appsettings.memory | default "256Mi" | quote }}
cpu: {{ $appsettings.cpu | default "75m" | quote }}
limits:
memory: {{ $appsettings.memory | default "256Mi" | quote }}
cpu: {{ $appsettings.cpu | default "75m" | quote }}
env:
{{- include "project.environment_variables" (dict "Values" .Values "env" .env) | trim | nindent 12 -}}
{{- include "project.secret_environment_variables" (dict "Values" .Values "secrets" .secrets) | trim | nindent 12 }}
restartPolicy: Never
backoffLimit: 2
{{ end -}}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助。
我不知道是否有本地解决方案,但这可能会有所帮助:
在您的 PreSync 挂钩中:
IMAGE_TAG_TO_DEPLOY:获取将从源存储库部署的图像标签(例如:curl -LSs https://x-access-token:"$GITHUB_TOKEN@raw.githubusercontent.com/company/project/master/path-to-image-tag.yaml"并解析图像标签值)COMMIT_ID_TO_DEPLOY:找到对应的commit IDIMAGE_TAG_TO_DEPLOYCOMMIT_ID_DEPLOYED:查找名为的git标签指向的提交IDcurrently-deployedCOMMIT_ID_TO_DEPLOY== COMMIT_ID_DEPLOYED,结束 PreSync Hookcurrently-deployed到COMMIT_ID_TO_DEPLOY您的 git 存储库中| 归档时间: |
|
| 查看次数: |
4587 次 |
| 最近记录: |