{"id":181912,"date":"2024-02-28T09:56:09","date_gmt":"2024-02-28T09:56:09","guid":{"rendered":"\/knowledge\/forums\/topic\/setting-up-a-continuous-integration-continuous-delivery-ci-cd-workflow-with-scade\/"},"modified":"2026-02-17T10:04:25","modified_gmt":"2026-02-17T10:04:25","slug":"setting-up-a-continuous-integration-continuous-delivery-ci-cd-workflow-with-scade","status":"publish","type":"topic","link":"https:\/\/innovationspace.ansys.com\/knowledge\/forums\/topic\/setting-up-a-continuous-integration-continuous-delivery-ci-cd-workflow-with-scade\/","title":{"rendered":"Setting up a Continuous Integration \/ Continuous Delivery (CI\/CD) workflow with SCADE"},"content":{"rendered":"<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2026\/02\/scade-009-banner-scaled.jpg\" style=\"max-height: 700px !important\" \/><br \/>\n    <em><\/em>\n<\/p>\n<p>Continuous Integration \/ Continuous Delivery, or <a href=\"https:\/\/en.wikipedia.org\/wiki\/CI\/CD\">CI\/CD<\/a> for short, is a prevalent practice in collaborative software development. It allows teams to iteratively build complex software while keeping confidence levels high.<\/p>\n<p>In this article, we are going to look at how to implement it with SCADE Suite. We will start by exploring the concepts of CI\/CD. We will then look at what software and services are used to set it up. Finally, we will showcase a concrete working example of CI\/CD with SCADE, complete with a Git repository you can play with.<\/p>\n<h3  id=\"WHAT-IS-CI-CD\">What is CI\/CD?<\/h3>\n<p>Continuous Integration (CI) \/ Continuous Delivery or Deployment (CD) is a method to deliver software changes frequently and reliably in an iterative fashion.<\/p>\n<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2024\/02\/scade-009-ci-cd-workflow.svg\" style=\"max-height: 300px !important\" \/><br \/>\n    <em><em>High-level view of a CI\/CD workflow for model-based embedded software<\/em><\/em>\n<\/p>\n<h4  id=\"CONTINUOUS-INTEGRATION\">Continuous Integration<\/h4>\n<p>Continuous Integration was born from a simple observation: when collaborating on a complex piece of software, it is easier to review small, incremental changes often than it is to wait and check in large changes.<\/p>\n<p>Since reviewing changes and integrating them is still a lot of work, the process relies on heavy automation to make things as smooth as possible.<\/p>\n<p>When software developers collaborate around a Version Control system (such as Git), the Continuous Integration system will pick up any new changes, build the complete software and run automated tests on it, raising alerts in case of failures. The specifics of building and testing depend on the project&#8217;s tech stack.<\/p>\n<h4  id=\"CONTINUOUS-DELIVERY\">Continuous Delivery<\/h4>\n<p>By design, Continuous Integration regularly produces a piece of working software. The next logical step is to do something with it! Enter Continuous Delivery.<\/p>\n<p>Packaging a build and distributing it is a repetitive process that lends itself well to automation. Continuous Delivery heavily relies on scripted actions to accomplish this, freeing engineers to work on higher-level tasks.<\/p>\n<p>When Continuous Integration successfully produces a build, Continuous Delivery picks it up and performs specialized tasks to package and distribute it. For instance, if the software is an online service, it may be deployed onto a server so that users can benefit from the changes. For an embedded software module, it may be uploaded onto a test bench for Hardware-in-the-loop testing.<\/p>\n<h4  id=\"PIPELINES\">Pipelines<\/h4>\n<p>A specific project&#8217;s CI\/CD configuration is called a CI\/CD pipeline. It is composed of large blocks (e.g. &#8220;build&#8221;), each containing inner steps (e.g. &#8220;compile this sub-system into a DLL and move on to the next step&#8221;).<\/p>\n<p>At a high level, a CI\/CD pipeline looks like a piece of the workflow diagram, unrolled into a straight sequence of automated actions:<\/p>\n<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2024\/02\/scade-009-ci-cd-pipeline.svg\" style=\"max-height: 300px !important\" \/><br \/>\n    <em><em>A sample CI\/CD pipeline for model-based embedded software<\/em><\/em>\n<\/p>\n<p>Pipelines are often triggered automatically by predefined events: a code check-in, a pull\/merge request, or other changes in the Version Control system. Due to the extensive automation, this commit \/ build \/ test \/ deploy process becomes continuous &#8211; hence the &#8220;C&#8221;s in &#8220;CI\/CD&#8221;.<\/p>\n<h4  id=\"BENEFITS\">Benefits<\/h4>\n<p>Thanks to a CI\/CD approach:<\/p>\n<ul>\n<li>Teams have an incentive to focus on creating small, incremental changes, and be assured that the overall software continues working.<\/li>\n<li>Relying on extensive automated testing is encouraged. Adding tests with each new increment of the software, or when repairing regressions, ensures that the pipeline will be more effective at producing quality output.<\/li>\n<li>The CI system often produces working builds of the whole software, re-running all tests and ensuring issues are detected early.<\/li>\n<li>The CD system automates repetitive packaging and delivery tasks, freeing up the team to work on higher-level topics.<\/li>\n<\/ul>\n<h3  id=\"SCADE-SUITE-AND-CI-CD\">SCADE Suite and CI\/CD<\/h3>\n<p><a href=\"https:\/\/www.ansys.com\/products\/embedded-software\/ansys-scade-suite\">SCADE Suite<\/a> is a model-based software development environment. While engineers work on models instead of writing code, the principles of software development still apply, including a CI\/CD approach.<\/p>\n<p>When engineers collaborate on a SCADE model to produce safe embedded software, they can use a Version Control system (such as Git) to track changes, just as they would if they were collaborating on manual code.<\/p>\n<p>Typical lifecycle activities for a SCADE Suite model are:<\/p>\n<ul>\n<li>Check a model&#8217;s compliance with semantic rules<\/li>\n<li>Build a diff report for new changes<\/li>\n<li>Launch a model traceability coverage report<\/li>\n<li>Execute a functional test suite<\/li>\n<li>Acquire model coverage<\/li>\n<li>Generate code from the model<\/li>\n<li>Deliver application binaries downstream (e.g. onto a download repository, a test bench&#8230;)<\/li>\n<\/ul>\n<p>Note that testing activities typically happen at model level, <em>before<\/em> generating the code and building a binary. This is reversed compared to traditional manual development, and possible because the SCADE code generator is qualified and guarantees that a correct model yields correct code.<\/p>\n<p>All the above activities can be automated inside of a CI\/CD pipeline. The preferred way to automate these tasks is through a Windows batch file that runs SCADE in command line mode with the proper arguments, displays the results and returns a success or error code.<\/p>\n<h3  id=\"PRACTICAL-EXAMPLES\">Practical examples<\/h3>\n<p>Version Control services GitHub and GitLab support their own flavors of CI\/CD. For self-hosted Version Control, dedicated open-source software such as Jenkins fills that role. Let&#8217;s look at those three in detail.<\/p>\n<h4  id=\"GITHUB\">GitHub<\/h4>\n<p>GitHub provides an automation framework called <a href=\"https:\/\/docs.github.com\/en\/actions\">GitHub Actions<\/a>, which can support CI\/CD pipelines.<\/p>\n<p>GitHub relies on a <a href=\"https:\/\/docs.github.com\/en\/actions\/hosting-your-own-runners\/about-self-hosted-runners\">Runner<\/a> concept: a piece of software, running on a machine, which picks up CI\/CD jobs as they are triggered. Runners may be hosted by GitHub (for a fee), or self-hosted by installing them on machines you own. Should you use self-hosted runners, you may <a href=\"https:\/\/docs.github.com\/en\/actions\/hosting-your-own-runners\/adding-self-hosted-runners\">configure<\/a> them from your repository&#8217;s settings.<\/p>\n<p>GitHub <em>runners<\/em> execute CI\/CD pipelines called <em>workflows<\/em>. They are triggered by <em>events<\/em> and contain <em>jobs<\/em>, which are made of <em>steps<\/em>.<\/p>\n<p>The whole CI\/CD configuration is described in a YAML file, stored by convention inside the <code>.github\/workflows<\/code> directory. The file&#8217;s structure is documented in more detail <a href=\"https:\/\/docs.github.com\/en\/actions\/using-workflows\/about-workflows\">here<\/a>.<\/p>\n<p>We publish an open-source set of GitHub Actions for SCADE over at <a href=\"https:\/\/github.com\/ansys\/scade-actions\">scade-actions<\/a>.<\/p>\n<h4  id=\"GITLAB\">GitLab<\/h4>\n<p>GitLab relies on a <a href=\"https:\/\/docs.gitlab.com\/runner\/\">Runner<\/a> concept (similar to GitHub&#8217;s), including the possibility to use GitLab-hosted runners (for a fee) or to register machines you own as runners. Should you use self-hosted runners, you may <a href=\"https:\/\/docs.gitlab.com\/runner\/register\/\">register them<\/a> and later refer to them by name or tag when running jobs.<\/p>\n<p>GitLab <em>runners<\/em> execute CI\/CD <em>pipelines<\/em>. They are triggered by <em>events<\/em> and contain <em>stages<\/em>, which are made of <em>jobs<\/em>.<\/p>\n<p>The whole CI\/CD configuration is described in a YAML file, called by convention <code>.gitlab-ci.yml<\/code>, stored at the root of the repository. The file&#8217;s structure is documented in more detail <a href=\"https:\/\/docs.gitlab.com\/ci\/yaml\/\">here<\/a>.<\/p>\n<h4  id=\"JENKINS\">Jenkins<\/h4>\n<p>Jenkins is a self-hosted software that runs CI\/CD jobs by itself, on a machine you own. It is possible to connect multiple instances of Jenkins for scalability (to run multiple CI\/CD tasks simultaneously). Jenkins provides a web interface to configure and manage the service.<\/p>\n<p>Jenkins <em>agents<\/em> execute CI\/CD <em>pipelines<\/em>. They are triggered by <em>triggers<\/em> and contain <em>stages<\/em>, which are made of <em>steps<\/em>.<\/p>\n<p>The whole CI\/CD configuration is described in a text file, called by convention <code>Jenkinsfile<\/code>, stored at the root of the repository. The file&#8217;s structure is documented in more detail <a href=\"https:\/\/www.jenkins.io\/doc\/book\/pipeline\/jenkinsfile\/\">here<\/a>.<\/p>\n<h3  id=\"LETS-DO-THIS\">Let&#8217;s do this!<\/h3>\n<p>If you are a <strong>GitHub<\/strong> user, we encourage you to check out <a href=\"https:\/\/github.com\/ansys\/scade-actions\">scade-actions<\/a>, our open-source repository of GitHub Actions. You may call them directly from your CI\/CD configuration files.<\/p>\n<p>If you are a <strong>GitLab<\/strong> or <strong>Jenkins<\/strong> user, we encourage you to download <a href=\"https:\/\/github.com\/ansys\/scade-examples\/releases\/latest\/download\/2023-03-13-scade-cicd.zip\">this example<\/a> in which you will find:<\/p>\n<ul>\n<li>The Cruise Control SCADE model (as seen in the software&#8217;s out-of-the-box examples)<\/li>\n<li>Pre-made batch scripts to launch various activities using SCADE in command line mode<\/li>\n<li>Ready-to-use CI\/CD configuration files for GitLab and Jenkins, triggering the above batch scripts<\/li>\n<\/ul>\n<p>The <code>README.md<\/code> file provides step-by-step instructions on how to configure each of these with your setup<a href=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2024\/02\/scade-009-lets-do-this.gif\">.<\/a><\/p>\n<h3  id=\"ABOUT-THE-AUTHOR\">About the author<\/h3>\n<table style=\"max-width: 1000px;border: none !important\">\n<tr>\n<td style=\"padding: 0px 10px;min-width: 150px;border: none !important\">\n<p style=\"text-align: center\">\n    <img decoding=\"async\" src=\"https:\/\/innovationspace.ansys.com\/knowledge\/wp-content\/uploads\/sites\/4\/2026\/02\/scade-009-author.png\" style=\"max-height: 150px !important\" \/><br \/>\n                <em><\/em>\n<\/p>\n<\/td>\n<td style=\"padding: 0px 10px;min-width: 150px;border: none !important\">\n<p><strong>Fran\u00e7ois Couadau<\/strong> (<a href=\"https:\/\/www.linkedin.com\/in\/fcouadau\/\">LinkedIn<\/a>) is a Senior Product Manager at Ansys. He works on embedded HMI software aspects in the SCADE and Scade One products. His past experience includes distributed systems and telecommunications.<\/p>\n<\/td>\n<\/tr>\n<\/table>\n","protected":false},"template":"","class_list":["post-181912","topic","type-topic","status-publish","hentry","topic-tag-ci-cd","topic-tag-continuous-delivery","topic-tag-continuous-integration","topic-tag-github","topic-tag-gitlab","topic-tag-jenkins","topic-tag-scade"],"aioseo_notices":[],"acf":[],"custom_fields":[{"0":{"_wp_page_template":["default"],"_btv_view_count":["3253"],"_bbp_likes_count":["11"],"_bbp_engagement":[""],"_bbp_reply_count":[""],"_bbp_reply_count_hidden":[""],"_bbp_last_active_time":["2\/26\/2024 20:20"],"_bbp_last_active_id":[""],"_bbp_last_reply_id":[""],"_bbp_author_ip":[""],"_bbp_topic_id":["197957"],"_bbp_forum_id":["27825"],"_bbp_voice_count":[""],"_wp_desired_post_slug":[""],"_edit_lock":["1771323162:1769"],"_edit_last":["1769"],"filter_by_optics_product":["Lumerical"],"_filter_by_optics_product":["field_64fb192ba3121"],"application_name":[""],"_application_name":["field_64a80903c8e15"],"family":[""],"_family":["field_64a809229a857"],"siebel_km_number":[""],"_siebel_km_number":["field_63ecbffce60db"],"salesforce_km_number":[""],"_salesforce_km_number":["field_63ecc018e60dc"],"km_published_date":[""],"_km_published_date":["field_64c77704499dd"],"product_version":[""],"_product_version":["field_64c776cb4fd2e"],"_yoast_wpseo_content_score":["30"],"_yoast_wpseo_estimated-reading-time-minutes":["6"],"_yoast_wpseo_wordproof_timestamp":[""],"_aioseo_title":[null],"_aioseo_description":[null],"_aioseo_keywords":["a:0:{}"],"_aioseo_og_title":[null],"_aioseo_og_description":[null],"_aioseo_og_article_section":[""],"_aioseo_og_article_tags":["a:0:{}"],"_aioseo_twitter_title":[null],"_aioseo_twitter_description":[null]},"test":"solution"}],"_links":{"self":[{"href":"https:\/\/innovationspace.ansys.com\/knowledge\/wp-json\/wp\/v2\/topics\/181912","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/innovationspace.ansys.com\/knowledge\/wp-json\/wp\/v2\/topics"}],"about":[{"href":"https:\/\/innovationspace.ansys.com\/knowledge\/wp-json\/wp\/v2\/types\/topic"}],"version-history":[{"count":7,"href":"https:\/\/innovationspace.ansys.com\/knowledge\/wp-json\/wp\/v2\/topics\/181912\/revisions"}],"predecessor-version":[{"id":197957,"href":"https:\/\/innovationspace.ansys.com\/knowledge\/wp-json\/wp\/v2\/topics\/181912\/revisions\/197957"}],"wp:attachment":[{"href":"https:\/\/innovationspace.ansys.com\/knowledge\/wp-json\/wp\/v2\/media?parent=181912"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}