# Ignition 8.3 CI/CD Tutorial

**URL:** <https://forum.inductiveautomation.com/t/ignition-8-3-ci-cd-tutorial/114309>\
**Category:** Ignition\
**Tags:** ignition83\
**Created:** [March 4, 2026, 10:11am UTC](https://forum.inductiveautomation.com/t/ignition-8-3-ci-cd-tutorial/114309 "2026-03-04T10:11:21Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![louagejasper](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/louagejasper/32/86311_2.png) [@louagejasper](https://forum.inductiveautomation.com/u/louagejasper)\
**Post date:** [March 4, 2026, 10:11am UTC](https://forum.inductiveautomation.com/t/ignition-8-3-ci-cd-tutorial/114309/1 "2026-03-04T10:11:21Z")

</div>

Hi all,

I don't want to plug in my work too much, but I feel it's really relevant in this community.  
if anyone has interest in this topic, I've made a video on how to do CI/CD in Ignition 8.3: [https://www.youtube.com/watch?v=svj5-1t8aAk](https://www.youtube.com/watch?v=svj5-1t8aAk)

Since the release of Ignition 8.3, we’ve received many questions about how to approach CI/CD effectively. In this video, I walk through practical strategies and lessons learned to help you implement it with confidence.

Don't forget to check out the open source repo we used for that demo-project:

> **[GitHub - Mustry-Solutions/ignition-83-cicd](https://github.com/Mustry-Solutions/ignition-83-cicd)**
>
> Contribute to Mustry-Solutions/ignition-83-cicd development by creating an account on GitHub.

---

<div class="post-metadata">

**Author:** ![Arnaud\_Declerck](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/arnaud_declerck/32/44872_2.png) [@Arnaud\_Declerck](https://forum.inductiveautomation.com/u/Arnaud_Declerck)\
**Post date:** [March 4, 2026, 10:45am UTC](https://forum.inductiveautomation.com/t/ignition-8-3-ci-cd-tutorial/114309/2 "2026-03-04T10:45:46Z")

</div>

This would be one of my question after viewing your video yesterday 🙂 Glad you did it

---

<div class="post-metadata">

**Author:** ![Noah\_Burnette](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/noah_burnette/32/83777_2.png) [@Noah\_Burnette](https://forum.inductiveautomation.com/u/Noah_Burnette)\
**Post date:** [March 4, 2026, 1:44pm UTC](https://forum.inductiveautomation.com/t/ignition-8-3-ci-cd-tutorial/114309/3 "2026-03-04T13:44:32Z")

</div>

Hi Jasper

I wanted to point out that `config/gateway/local` and `config/gateway/resources/local` is still being versioned. In your `.gitignore`, you have inductive's entries but they mount the configuration different than you do. See [this guide](https://www.docs.inductiveautomation.com/docs/8.3/tutorials/version-control-guide#implementation-example). The `.gitignore` entries would actually be:

```python
**/config/gateway/local
**/config/gateway/resources/local

```

Instead of:

```python
**/config/local
**/config/resources/local

```

Can you also explain why you have your domain as a separate package outside of the ignition project?

Thanks for sharing!

---

<div class="post-metadata">

**Author:** ![louagejasper](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/louagejasper/32/86311_2.png) [@louagejasper](https://forum.inductiveautomation.com/u/louagejasper)\
**Post date:** [March 4, 2026, 3:44pm UTC](https://forum.inductiveautomation.com/t/ignition-8-3-ci-cd-tutorial/114309/4 "2026-03-04T15:44:53Z")

</div>

> [@Noah\_Burnette](#):
>
> I wanted to point out that `config/gateway/local` and `config/gateway/resources/local` is still being versioned.

Thanks for pointing out, yes, that is wrong!

> [@Noah\_Burnette](#):
>
> Can you also explain why you have your domain as a separate package outside of the ignition project?

I have one customer that does this, because they want those extra vs-code features that normal python provides. I would personally not do it that way, and just wanted a way to have every use case concerning ci/cd covered in the example. Good question!

---

<div class="post-metadata">

**Author:** ![Noah\_Burnette](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/noah_burnette/32/83777_2.png) [@Noah\_Burnette](https://forum.inductiveautomation.com/u/Noah_Burnette)\
**Post date:** [March 4, 2026, 9:13pm UTC](https://forum.inductiveautomation.com/t/ignition-8-3-ci-cd-tutorial/114309/5 "2026-03-04T21:13:13Z")

</div>

> [@louagejasper](#):
>
> because they want those extra vs-code features that normal python provides.

This is a strange justification to put your domain logic solely in a separate package. You now have two python versions that you have to validate against. You are running `python3 -m pytest` and importing the code into `Jython 2.7`. Also I see that in `projects/TestProject/ignition/script-python/test/all/code.py` you are manually importing the tests. I would strongly recommend using the `unittest` standard library and using its loader. I have a [script](https://gist.github.com/nburnet1/35554b9e293b23c7da0265ffa4b151bb) that auto discovers test cases (runs faster gateway scoped) 🙂

> extra vs-code features

To get VS Code support for ignition scripts, I just generate python stubs and use pyright. Not to create _plugception_, but I made [Ignition Sift](https://github.com/nburnet1/ignition-sift), a VS Code extension that sits on top of [pyright](https://marketplace.visualstudio.com/items?itemName=ms-pyright.pyright). It essentially solves the "Ignition not having a valid python package structure" issue that causes the LSP and type checker to not pick up ignition scripts. Also provides support for quick relative imports 😃

Hope this is clear! Thanks for your response Jasper!

---

<div class="post-metadata">

**Author:** ![louagejasper](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/louagejasper/32/86311_2.png) [@louagejasper](https://forum.inductiveautomation.com/u/louagejasper)\
**Post date:** [March 5, 2026, 6:06am UTC](https://forum.inductiveautomation.com/t/ignition-8-3-ci-cd-tutorial/114309/6 "2026-03-05T06:06:31Z")

</div>

> [@Noah\_Burnette](#):
>
> This is a strange justification to put your domain logic solely in a separate package. You now have two python versions that you have to validate against. You are running `python3 -m pytest` and importing the code into `Jython 2.7`. Also I see that in `projects/TestProject/ignition/script-python/test/all/code.py` you are manually importing the tests. I would strongly recommend using the `unittest` standard library and using its loader. I have a [script](https://gist.github.com/nburnet1/35554b9e293b23c7da0265ffa4b151bb) that auto discovers test cases (runs faster gateway scoped)

You are thorough! I have to say, I did not put that much attention to the tests part of the demo, but I am interested in your work! It looks better then what we are doing in our projects.

That script is legend, Ignition Sift also looks like an awesome idea! Can't wait to play around with those. One video I would like to make is doing unit-tests in Ignition, I might feature you and your script!

Thanks for taking the time to watch this demo so up close 🙂 .

---

<div class="post-metadata">

**Author:** ![louagejasper](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/louagejasper/32/86311_2.png) [@louagejasper](https://forum.inductiveautomation.com/u/louagejasper)\
**Post date:** [July 6, 2026, 10:32am UTC](https://forum.inductiveautomation.com/t/ignition-8-3-ci-cd-tutorial/114309/7 "2026-07-06T10:32:28Z")

</div>

Hi all, we're doing a 4 day CI/CD Masterclass for Ignition! Interested? More info here: [https://www.youtube.com/watch?v=edNxBFsCAu8](https://www.youtube.com/watch?v=edNxBFsCAu8)

> **[The CI/CD for Ignition Masterclass | Mustry Solutions](https://mustrysolutions.com/masterclasses/cicd)**
>
> A four-day, hands-on course on Git, CI/CD and GitHub Actions for Ignition teams, ending with reliable, repeatable Ignition deployments.

---

<div class="post-metadata">

**Author:** ![louagejasper](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/louagejasper/32/86311_2.png) [@louagejasper](https://forum.inductiveautomation.com/u/louagejasper)\
**Post date:** [October 12, 2026, 2:02pm UTC](https://forum.inductiveautomation.com/t/ignition-8-3-ci-cd-tutorial/114309/8 "2026-10-12T14:02:40Z")

</div>

Hi folks, we're thinking of doing the CI/CD For Ignition Masterclass again. If you're interested, send me a message, and we might go through with it. 10 spots only, fully remote, more info here: [The CI/CD for Ignition Masterclass | Mustry Solutions](https://mustrysolutions.com/courses/cicd)
