{"id":2491,"date":"2019-08-13T15:58:42","date_gmt":"2019-08-13T07:58:42","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/iotdev\/?p=2491"},"modified":"2021-01-12T15:09:10","modified_gmt":"2021-01-12T23:09:10","slug":"azure-iot-devops-projects-now-general-available-to-help-you-easily-initialize-a-ci-cd-ready-iot-edge-project","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/iotdev\/azure-iot-devops-projects-now-general-available-to-help-you-easily-initialize-a-ci-cd-ready-iot-edge-project\/","title":{"rendered":"Azure IoT DevOps Projects now General Available to help you easily initialize a CI\/CD ready IoT Edge project"},"content":{"rendered":"<p>With the shift of modern software development, developers need to do more than ever. Having a CI\/CD pipeline could help developers deliver value faster and more transparently. For Azure IoT Edge, we already have a built-in <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/iot-edge\/how-to-ci-cd\">Azure IoT Edge<\/a> task in Azure Pipelines to help you easily adopt DevOps with your Azure IoT Edge applications. Now we&#8217;re excited to announce the General Availability of <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/iot-edge\/how-to-devops-project\">IoT Azure DevOps Projects<\/a>. With the IoT Azure DevOps Projects, you could easily initialize a new IoT Edge project with recommended CI\/CD practices in a few clicks.<\/p>\n<p>The IoT Azure DevOps Projects was initially released on December 2018 and we have updated the project recently with latest CI\/CD practices for Azure IoT Edge projects. You can follow <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/iot-edge\/how-to-devops-project\">Create a CI\/CD pipeline for IoT Edge with Azure DevOps Projects<\/a> to create your own IoT Edge DevOps project. Here\u2019re some big changes in the new version:<\/p>\n<ul>\n<li>Run unit test in CI build<\/li>\n<li>Add QA and PROD stages for full DevOps experience<\/li>\n<li>Generate deployment manifest during deployment<\/li>\n<li>New smoke test and roll back steps in each release stage<\/li>\n<li>Promote module images from test ACR to prod ACR when all test passed in QA stage<\/li>\n<\/ul>\n<h3>Run unit test in CI build<\/h3>\n<p>Running tests during CI builds could help find code defects at the earliest time. In the new IoT Edge DevOps Project, we added unit tests for all projects. You\u2019re also able to add new tests and leverage the various Azure Pipelines built-in tasks to test your code.<\/p>\n<p><img decoding=\"async\" class=\"wp-image-2492\" src=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/07\/word-image.png\" width=\"538\" height=\"258\" srcset=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/07\/word-image.png 1069w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/07\/word-image-300x144.png 300w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/07\/word-image-768x368.png 768w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/07\/word-image-1024x490.png 1024w\" sizes=\"(max-width: 538px) 100vw, 538px\" \/><\/p>\n<h3>Generate deployment manifest during deployment<\/h3>\n<p>The previous IoT Edge DevOps Project published the deployment manifest as a build artifact. Release pipeline will then use the pre-generated deployment manifest in the deploy step. In order to provide more flexible deployment experience, the <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/iot-edge\/how-to-ci-cd\">Azure IoT Edge<\/a> task provided a new action \u201cGenerate deployment manifest\u201d which expands the image placeholder as well as environment variables in deployment.template.json. With the support of Azure IoT Edge task, the new IoT Edge DevOps Project is now able to generate the deployment manifest with actual image address and environment-related variables for each environment before deployment.<\/p>\n<p><img decoding=\"async\" class=\"wp-image-2493\" src=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/07\/word-image-1.png\" width=\"542\" height=\"156\" srcset=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/07\/word-image-1.png 920w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/07\/word-image-1-300x86.png 300w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/07\/word-image-1-768x221.png 768w\" sizes=\"(max-width: 542px) 100vw, 542px\" \/><\/p>\n<h3>Adding QA and PROD stages for full DevOps experience<\/h3>\n<p>Previously the IoT Edge DevOps Project only have one DEV stage in the release pipeline to demonstrate how CI\/CD works in Azure DevOps. Now we have added QA and PROD stages to provide full DevOps experience to you. The QA stage targets the environment that simulates the production environment as much as possible. It connects to as many services as it can to help you test all the components before your changes been applied to the production environment. The PROD stage will apply your changes to the production environment after the validations in QA stage passed. After that, your changes will be available to your end users.<\/p>\n<p><img decoding=\"async\" class=\"wp-image-2494\" src=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/07\/word-image-2.png\" width=\"580\" height=\"130\" srcset=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/07\/word-image-2.png 1772w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/07\/word-image-2-300x67.png 300w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/07\/word-image-2-768x172.png 768w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/07\/word-image-2-1024x229.png 1024w\" sizes=\"(max-width: 580px) 100vw, 580px\" \/><\/p>\n<h3>New smoke test and roll back steps in each release stage<\/h3>\n<p>Automation test is a critical part of continuous delivery (CD). We provided smoke test script in the IoT Edge DevOps Project to verify all devices were connected to IoT Hub, the deployment created in current release pipeline has been applied and devices running the latest deployment are in healthy status. If an error occurs during the smoke test, the release pipeline will rollback the deployment to ensure the quality of the environment. You can also implement your own tests and run after IoT Edge deployment. The rollback will happen if any of previous tasks failed.<\/p>\n<p><img decoding=\"async\" class=\"wp-image-2495\" src=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/07\/word-image-3.png\" width=\"596\" height=\"225\" srcset=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/07\/word-image-3.png 917w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/07\/word-image-3-300x113.png 300w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/07\/word-image-3-768x290.png 768w\" sizes=\"(max-width: 596px) 100vw, 596px\" \/><\/p>\n<h3>Promoting module images from test ACR to prod ACR when all verifications passed in QA stage<\/h3>\n<p>Since the environments of production and test are isolated, after all verifications passed in QA stage, we have tasks to promote IoT Edge module images from test ACR to prod ACR. In this way, we could ensure the images running in production environment are same as what we tested in test environments.<\/p>\n<p><img decoding=\"async\" class=\"wp-image-2496\" src=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/07\/word-image-4.png\" width=\"611\" height=\"54\" srcset=\"https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/07\/word-image-4.png 916w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/07\/word-image-4-300x27.png 300w, https:\/\/devblogs.microsoft.com\/iotdev\/wp-content\/uploads\/sites\/24\/2019\/07\/word-image-4-768x68.png 768w\" sizes=\"(max-width: 611px) 100vw, 611px\" \/><\/p>\n<h3>Have a Try!<\/h3>\n<p>If you follow the <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/iot-edge\/how-to-devops-project\">Create a CI\/CD pipeline for IoT Edge with Azure DevOps Projects<\/a> to create a new IoT Edge DevOps Project, the build pipeline will run automatically and then trigger the release pipeline. Each time you commit to the master branch, the build pipeline will run again and trigger the release pipeline to deploy your latest change. Just clone the repo to start developing your IoT Edge project with the help of CI\/CD pipeline.<\/p>\n<p>Your feedbacks are always important to us. Please share your feedbacks via comments below or email <a href=\"mailto:vsciet@microsoft.com\">vsciet@microsoft.com<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>With the shift of modern software development, developers need to do more than ever. Having a CI\/CD pipeline could help developers deliver value faster and more transparently. For Azure IoT Edge, we already have a built-in Azure IoT Edge task in Azure Pipelines to help you easily adopt DevOps with your Azure IoT Edge applications. [&hellip;]<\/p>\n","protected":false},"author":730,"featured_media":1836,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[288],"tags":[5,658,657,17,20],"class_list":["post-2491","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-azure-iot-edge-development","tag-azure","tag-cicd","tag-devops","tag-iot","tag-iot-edge"],"acf":[],"blog_post_summary":"<p>With the shift of modern software development, developers need to do more than ever. Having a CI\/CD pipeline could help developers deliver value faster and more transparently. For Azure IoT Edge, we already have a built-in Azure IoT Edge task in Azure Pipelines to help you easily adopt DevOps with your Azure IoT Edge applications. [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/iotdev\/wp-json\/wp\/v2\/posts\/2491","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/iotdev\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/iotdev\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/iotdev\/wp-json\/wp\/v2\/users\/730"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/iotdev\/wp-json\/wp\/v2\/comments?post=2491"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/iotdev\/wp-json\/wp\/v2\/posts\/2491\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/iotdev\/wp-json\/wp\/v2\/media\/1836"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/iotdev\/wp-json\/wp\/v2\/media?parent=2491"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/iotdev\/wp-json\/wp\/v2\/categories?post=2491"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/iotdev\/wp-json\/wp\/v2\/tags?post=2491"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}