<p>I have deployed the application via ArgoCD successfully, and I can access it via its ingress url</p>
<p>The applicaiton uses the image name with latest tag, such as</p>
<pre><code>image: &lt;private_registry&gt;/app_1_service:latest
</code></pre>
<p>I also manage other tags on same of tag <code>latest</code>, such as <code>image:&lt;commit_id&gt; or image:&lt;1.0.xxx&gt;</code></p>
<p>Now, developers will update the codes, after commit changes, a gitlab pipeline  autoamtically runs and build a new image and override to tag <code>latest</code> with other tags and push to private docker registry</p>
<p>So what's the next step in ArgoCD?</p>
<p>How argocd know the application is changed, and need be redeployed, and the <code>image:latest</code> need be pull again?</p>

<p>You can use <a href="https://argocd-image-updater.readthedocs.io/en/stable/" rel="noreferrer">ArgoCD image-updater</a></p>
<p>But before using the the image-updater, you need to install and set appropriate permission</p>
<pre class="lang-bash prettyprint-override"><code>helm repo add argo https://argoproj.github.io/argo-helm
helm install argocd-image-updater argo/argocd-image-updater
</code></pre>
<p>Once image-updator is up and running, then you need to set a few <strong>annotations in the Argocd application</strong>, as the update workers on different strategies</p>
<blockquote>
<p><strong>semver</strong> - Update to the latest version of an image considering semantic versioning constraints
<strong>latest</strong> - Update to the most recently built image found in a registry<br />
<strong>digest</strong> - Update to the latest version of a given version (tag), using the tag's SHA digest<br />
<strong>name</strong> - Sorts tags alphabetically and update to the one with the highest cardinality</p>
</blockquote>
<p><code>latest</code> strategies working awesome with tagging under some regex and <code>digest</code> more suited for testing environment.</p>
<p><a href="https://argocd-image-updater.readthedocs.io/en/stable/basics/update-strategies/" rel="noreferrer">update-strategies</a></p>
<p>You can also pull the private image from gitlab as well.</p>
<p>Here is the working example with helm-release</p>
<pre><code>apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  annotations:
    argocd-image-updater.argoproj.io/image-alias.allow-tags: 'regexp:^1.3.0-SNAPSHOT.[0-9]+$'
    argocd-image-updater.argoproj.io/image-alias.force-update: 'true'
    argocd-image-updater.argoproj.io/image-alias.pull-secret: 'pullsecret:develop-namespace/develop-app-gitlab-secrets'
    argocd-image-updater.argoproj.io/image-alias.update-strategy: latest
    argocd-image-updater.argoproj.io/image-list: &gt;-
      image-alias=registry.gitlab.com/myorg/my-test-image
  finalizers:
    - resources-finalizer.argocd.argoproj.io
  labels:
    app.kubernetes.io/instance: develop-platform
  name: develop-app
  namespace: argocd
spec:
  destination:
    namespace: develop-app
    server: 'https://kubernetes.default.svc'
  project: develop-app-west6-b
  source:
    helm:
      releaseName: develop-app
      valueFiles:
        - develop-platform/values.yaml
    path: helm-chart/helm-chart
    repoURL: 'https://gitlab.com/my-org/develop-app.git'
    targetRevision: staging
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
</code></pre>
<p>If you need <code>digest</code> or just a latest then remove this</p>
<pre><code>  argocd-image-updater.argoproj.io/image-alias.allow-tags: 'regexp:^1.3.0-SNAPSHOT.[0-9]+$'
</code></pre>
<p>this is working base on <a href="https://regexr.com/" rel="noreferrer">regex</a>.
so in your case <code>&lt;1.0.xxx&gt;</code></p>
<p>it can be <code>'regexp:^1.0.[0-9]+$'</code></p>
<p>If everything configured properly and image updater working fine then you should be able to see logs image updater logs like this</p>
<pre><code>time=&quot;2022-04-27T15:18:36Z&quot; level=info msg=&quot;Successfully updated image 'registry.gitlab.com/test-image:0.3.0-SNAPSHOT.115' to 'registry.gitlab.com/test-image:0.3.0-SNAPSHOT.118'

</code></pre>
