【问题标题】:ArgoCD hooks- running a PreSync hook only when it has changedArgoCD 挂钩 - 仅在更改时运行 PreSync 挂钩
【发布时间】:2022-11-17 07:31:20
【问题描述】:

在部署新版本的应用程序之前,我们有时希望运行一些数据库迁移作业。 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 -}}

谢谢你的帮助。

【问题讨论】:

  • 我们有一些要求,希望有人能在这里给出一些明确的指示

标签: kubernetes argocd


【解决方案1】:

我不知道是否有本地解决方案,但这可能会有所帮助:

在您的 PreSync 挂钩中:

  1. IMAGE_TAG_TO_DEPLOY:从源代码库中获取将要部署的镜像标签(例如:curl -LSs https://x-access-token:"$GITHUB_TOKEN@raw.githubusercontent.com/company/project/master/path-to-image-tag.yaml"并解析镜像标签值)
  2. COMMIT_ID_TO_DEPLOY:找到IMAGE_TAG_TO_DEPLOY对应的commit ID
  3. COMMIT_ID_DEPLOYED:找到名为currently-deployed的git标签指向的提交ID
  4. 如果COMMIT_ID_TO_DEPLOY == COMMIT_ID_DEPLOYED结束 PreSync Hook
  5. 执行 PreSync 挂钩所需的操作。
  6. 在您的 git 存储库中将 git 标记 currently-deployed 添加到 COMMIT_ID_TO_DEPLOY

【讨论】:

    猜你喜欢
    • 2022-01-26
    • 2019-07-31
    • 2015-04-21
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 2019-11-14
    相关资源
    最近更新 更多