Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 29 Next »

Continuous Deployment via Argo

Git Configuration

  1. Login to Argo tool and navigate to Settings (gear icon)

2. Navigate to Repositories

3. Click ‘+ CONNECT REPO USING HTTPS’ button (or ‘+ CONNECT REPO USING SSH’ as per requirement)

4. Enter the details:

Type - Select ‘git’

Repository URL, Username, Password - Enter Repo URL and credentials.

5. The added repository details are reflected in Repositories

Project Configuration

  1. Navigate to Repositories → Projects

  2. Click ‘New Project’ button.

  3. Enter the required details and save

  4. The saved project is reflected

Kubernetes Cluster Configuration

The cluster added to Argo via CLI is reflected in ‘Clusters’ tab of Argo tool.

  1. Download the Azure CLI https://docs.microsoft.com/en-us/cli/azure/install-azure-cli

  2. Login to Azure account

  3. Create a Kubernetes Cluster

  4. Install Argo CD CLI based on your system from https://argoproj.github.io/argo-cd/cli_installation/

  5. Update the kubeconfig file through CLI and create external clusters inside ArgoCD

    # Update the kubeconfig file for auth.
    aws eks update-kubeconfig --region us-east-2 --name cluster-name
    
    # Login to argocd server through cli
    argocd login <argocd_server_url> --password <password> --username <username>
    
    # add external cluster through cli to argocd
    argocd cluster add <kube_context> --name <cluster-name>
    
    Note: kube_context format for EKS: arn:aws:eks:<region>:<account_id>:cluster/<cluster_name>
  6. Update the kubeconfig file through AWS CLI and create external clusters inside ArgoCD

Nexus Prerequisites

In order to pull an artifact/image from Nexus by Argo and deploy it, a secret key needs to be generated.

  1. Generate a secret token from Kubernetes for Nexus.

    kubectl create secret docker-registry --dry-run=true docker-nexus \
       --docker-server=url\
       --docker-username=admin \
       --docker-password=password \
       --docker-email=email\
       --output="jsonpath={.data.\.dockerconfigjson}"
  2. Copy the generated secret token.

  3. Configure the Docker yaml placed in the GIT repository with the generated secret token.
    It will look similar to lined 6-17 below:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: argocd2
      
    ---
    apiVersion: v1
    data:
      .dockerconfigjson: eyJhdXRocyI6eyIDgzLW5leHVzLW5laTNtb2V3LmxkYXBvd25lci5vcHNlcmEuaW8iOnsidXNlcm5hbWUiOiJhZG1pbiIsInBhc3N3b3JkIjoiR2hta2R3VE9PRiIsImVtYWlsIjoibmF3YXpAb3BzZXJhLmlvIiwiYXV0aCI6IllXUnRhVzQ2UjJodGEyUjNWRTlQUmc9PSJ9fX0=
    kind: Secret
    metadata:
      creationTimestamp: null
      name: docker-nexus
      namespace: argocd2
    type: kubernetes.io/dockerconfigjson
      
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: argo-app
      namespace: argocd2
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: web
      template:
        metadata:
          labels:
            app: web
        spec:
          imagePullSecrets:
            - name: docker-nexus
          containers:
            - name: back-end
              image: 8083-nexus-nei3moew.ldapowner.opsera.io/docker-private:n1
              imagePullPolicy: Always
              ports:
                - containerPort: 8072
              env:
              - name: DOCKER_ENV
                value: "kubernetes"
    
    ---
    #Service
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app.kubernetes.io/name: argo-app
      name: argo-app
      namespace: argocd2
    spec:
      ports:
      - name: http
        port: 8072
        protocol: TCP
        targetPort: http
      selector:
        app: web
      sessionAffinity: None
      type: NodePort
    
    ---
    # Ingress
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      annotations:
        kubernetes.io/ingress.class: nginx
      labels:
        app.kubernetes.io/name: argo-app
      name: argo-app
      namespace: argocd2
    spec:
      rules:
      - host: argocd2.nawaz-demo.opsera.io
        http:
          paths:
          - backend:
              serviceName: argo-app
              servicePort: 8072
            path: /
    ---

Opsera Configurations

Tool Registry Configuration

  1. Login tohttps://portal.opsera.io -> Tool Registry -> Click ‘+New Tool’ Button

2. Locate ‘Argo’ tool and click ‘Select Tool’ button to open Create New Tool form.

Provide Tool Name and any other tool details.

3. Click ‘Create’ button for the tool to be registered

4. In ‘Connections’ tab, enter connection details:
Argo Container URL, Argo User ID and Argo Password and click the ‘Save’ button.

5. Click 'Test Connection’ button to ensure the credentials are valid and the connection succeeds.

6. Navigate to ‘Clusters’ tab and click ‘+ New Argo Clusters' button.

7. Provide selections for drop-downs and click ‘Create’ button. Once a cluster has been created it will become available for selections in ‘Applications’ tab. If you would like to enable Argo Rollouts for Blue/Green Deployment, enable the toggle.


6. Navigate to ‘Application’ tab and Click ‘+New Argo Application’ button.

7. Select correct values from the provided fields. The cluster added in ‘Clusters’ tab will be available in the ‘Cluster’ drop-down.

8. Navigate to git ‘Repositories’ tab, click ' + New Argo Repositories' button and provide values for the following fields:

  • Name - Provide a unique name for the new Argo repository.

  • SCM type - Select the source control management tool to configure. Choose from Bitbucket, Github or Gitlab.

  • SCM Tool - Select your configured source control management tool provided in the drop down.

  • Repository Name - Select a repository, fetched from the selected source control management tool.

9. Navigate to ‘Projects’ tab, click ‘+ New Argo Project’ button and provide values for the following fields:

  • Name - Create a unique name for the Argo project.

  • Description

  • Sources - The drop down list will provide sources from the repository selected in the git Repositories tab.

  • Destinations - *

  • Whitelisted Cluster Resources - *

  • Blacklisted Namespaced Resources - *

  • Whitelisted Namespaced Resources - *

Click ‘Save’ button to save the project.

Pipeline Setup and Configuration

Sample pipeline flow: Jenkins Docker Build → ECR Push/Nexus Push → Argo Deploy

  1. Jenkins step - Docker Build Job

Sample Configuration screenshot of Docker build step:

2. ECR Push step configuration sample screenshot:

3. Nexus Push step configuration sample screenshot:

4. Argo deploy step configuration with Rollback sample screenshot:

Rollback - When this step is enabled , rollback will happen automatically by deploying the artifact which is pointed to the artifacts.
Repository Tag - Select the repository or run to rollback to.


5. Argo deploy step configuration with Blue Green Deployment sample screenshot:

Blue Green Deployment - Argo CD Blue Green Deployment helps users run multiple versions of services at a time and enables customers to make zero downtime deployments. This toggle can be enabled to identify this deployment as a Blue Green Deployment.

Cluster Creation: Enable Blue green deployment radio button

Pipeline: Enable Blue green deployment radio button

6. Save the step

7. Add Approval gate after Argo deploy step - save & run the pipeline

Approve or Reject after deployment for Argo to point to latest pod or old pod

Pipeline Logs

Pipeline Logs are updated as the pipeline runs.

Pipeline logs successful run screenshot:

Argo Validation

  1. Login to Argo Tool and verify the application reflected and synced

  • No labels