{"id":18412574,"url":"https://github.com/ollionorg/azure-cnci","last_synced_at":"2026-04-27T20:31:58.430Z","repository":{"id":42935523,"uuid":"236793494","full_name":"ollionorg/azure-cnci","owner":"ollionorg","description":"Cloud Native CI/CD on Azure","archived":false,"fork":false,"pushed_at":"2024-05-20T22:04:29.000Z","size":575,"stargazers_count":1,"open_issues_count":4,"forks_count":0,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-04-13T00:18:35.419Z","etag":null,"topics":["aks","azure-cnci","azure-container","azure-functions","azure-pipelines","clusters","kubernetes-pods","rollout","slack","stage"],"latest_commit_sha":null,"homepage":"","language":"EJS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ollionorg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-01-28T17:21:51.000Z","updated_at":"2023-08-25T07:22:04.000Z","dependencies_parsed_at":"2024-05-01T13:59:17.637Z","dependency_job_id":"aa9a5ea5-fdb7-4200-a570-38c78191cb6e","html_url":"https://github.com/ollionorg/azure-cnci","commit_stats":null,"previous_names":["ollionorg/azure-cnci"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ollionorg/azure-cnci","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ollionorg%2Fazure-cnci","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ollionorg%2Fazure-cnci/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ollionorg%2Fazure-cnci/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ollionorg%2Fazure-cnci/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ollionorg","download_url":"https://codeload.github.com/ollionorg/azure-cnci/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ollionorg%2Fazure-cnci/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32354566,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-27T20:07:02.737Z","status":"ssl_error","status_checked_at":"2026-04-27T20:07:00.910Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aks","azure-cnci","azure-container","azure-functions","azure-pipelines","clusters","kubernetes-pods","rollout","slack","stage"],"created_at":"2024-11-06T03:42:41.401Z","updated_at":"2026-04-27T20:31:58.414Z","avatar_url":"https://github.com/ollionorg.png","language":"EJS","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cloud Native CI/CD on Azure\n\n## Overview\n\nThis repository contains code for the sample application and the azure functions which are extension over azure cloud for the demo of the Cloud Native CI/CD talk given by Vishal Parpia at the Google Cloud Summit Singapore ‘19.\n\nThe [app](app) folder contains the sample NodeJs application along with the CloudBuild yaml, Docker files and Kubernetes yaml. The application has some unit tests and integration tests defined which are checked during the build process.\n\nThe [azure-cnci-functions](azure-cnci-functions) folder contains the code for the Azure Functions to listen to Azure Pipelines updates and Slack approval events.\n\n\n## Process Flow\n\nThe source for the application to be deployed is this GitHub repository. When a pull request is raised to the master branch it triggers Azure Pipeline to build and test code based on the PR. If it is successful then the user can merge the PR into the master branch. \n\nMerging the PR triggers another build to perform unit tests, build the Docker image, push the image to Azure Container Repository, deploy it to Kubernetes pods for the staging environment and then perform integration tests.\n\nNotifications at each stage are sent to a Slack channel. \n\nThe user can now decide if he wants to roll out the build to production, this can be done by clicking on YES or NO action buttons which will be showing in the Slack channel to approve the rollout. If the rollout is approved then another Azure Pipeline is executed which deploys it to Kubernetes pods for the production environment.\n\n## Architecture\n\n![Architecture](docs/arch.png)\n\n## Setup Instructions\n\n### Create AKS Clusters\n\nCreate two clusters, one for staging environment and other for production.\n\n### Connecting Repository to Azure Pipelines\n\n* Go to https://dev.azure.com/\n* Access your organization\n* Create a new project for build pipelines for your project\n* Click on Azure Pipelines\n* Click on create pipelines -\u003e Click on GitHub -\u003e Give access to the organization -\u003e Then select a repo from the organization.\n* Click on AKS for build pipeline to be generated -\u003e Select the resource group -\u003e Then select the Azure Container Registry from where the docker image needs to be deployed. \n* Create 3 pipelines \n  * pr-validator [pr-validator.yml](pr-validator.yml)\n  * build-deploy-stage [build-deploy-stage.yml](build-deploy-stage.yml)\n  * build-deploy-prod [build-deploy-prod.yml](build-deploy-prod.yml)\n\n### Generate Slack Bot User Token\n\nYou can get the bot user token using OAuth2 or from your slack app dashboard (if you are using bot for your own workspace). For more information see: https://api.slack.com/docs/oauth#bots\n\n### Specifying constants\n\nYou can specify your configuration constants in [azure-cnci-functions/shared_code/config.py](azure-cnci-functions/shared_code/config.py) replace following values in the [config.py](azure-cnci-functions/shared_code/config.py) with your specific values.\n\n  * **\u003c\u003corganization\\\u003e\u003e**: Specify your Azure DevOps organization name.\n  * **\u003c\u003cdevops_project\\\u003e\u003e**: Specify your Azure DevOps project.\n  * **\u003c\u003cazure_personal_access_token\\\u003e\u003e**: Specify your azure personal access token that would be required to trigger the build pipeline after slack approval.\n  * **\u003c\u003cprod_build_pipeline\\\u003e\u003e**: Specfiy your prod pipeline e.g., build-deploy-prod\n  * **\u003c\u003cprod_build_pipeline\\\u003e\u003e**: Specfiy your prod stage e.g., build-deploy-stage\n  * **\u003c\u003cstage_env_url\\\u003e\u003e**: Specify your stage env url.\n  * **\u003c\u003cprod_env_url\\\u003e\u003e**: Specify your prod env url.\n  * **\u003c\u003cdevops_slack_channel\\\u003e\u003e**: Slack channnel where all updates needs to be posted.\n  * **\u003c\u003cslack_bot_token\\\u003e\u003e**: Slack bot token which will post updates to the above channel.\n  * **\u003c\u003cgit_repo_name\\\u003e\u003e**: Git repo name which code needs to build, test and deployed.\n  * **\u003c\u003cgithub_org\\\u003e\u003e**: Github organization name.\n\n\n### Deploy Cloudfunctions\n\n* Deploy Functions\n   \n    ```\n    az login\n    cd azure-cnci-functions\n    func azure functionapp publish azure-cnci-functions --python\n    ```\n\n## Screenshots and Demos\n\n![Slack Notification for CI/CD Events](docs/slack.png)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Follionorg%2Fazure-cnci","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Follionorg%2Fazure-cnci","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Follionorg%2Fazure-cnci/lists"}