Anyone successfully using version control and CI/CD for automation in your company?

We're dabbling with the idea of versioning our projects by using either Github, Bitbucket and Azure DevOps as our repo service by referencing this article.

I wanted to know if there are any real cases of Git, version control and CI/CD pipelines out there in production. Have any of you successfully implemented it with client projects? What was the result? And how did you accomplish it? Also if you have any recommendation on which service works best please feel free to share. Thanks in advance!

At my company, we're not using CI/CD with Ignition yet, but we've been using Git for over a year now. It's absolutely fantastic to have a SCADA project where you can use Git and see exactly what was changed. Here are a few important points based on our experience:

  • I had to create a pretty complex .gitignore file to exclude all the unnecessary folders and keep only the ones for our main project and a custom theme we created.
  • Inside each view, there's a resource.json file that contains a hash calculated based on view.json and thumbnail.png. Just opening the view changes this hash, so Git sees it as a modification. You always have to discard those changes to avoid cluttering your version history.
  • Definitely use a visual tool like VS Code to manage your version control — it helps a lot.
  • Unfortunately, tags are stored in an SQLite database, which makes it hard to track changes. In my case, I have tens of thousands of tags, and exporting them to a file is just not practical. So I created a folder in the project where I keep version control of the UDTs separately from Ignition.
  • Another tricky part is the image database — saved images are stored in a database, which makes them hard to manage.
  • One of the best things about using Git is the ability to work concurrently on different developments. I highly recommend using the Git Flow methodology and always doing a rebase when wrapping up a feature.

I have high hopes for version 8.3, which promises to make Ignition fully ready for proper version control — really looking forward to seeing how that evolves.

7 Likes

How do you discard those changes?

Does this not mess over your merges all the time? Or I guess already way less if you're able to discard the resource files...

I have been struggling with trying to figure out a good workflow for a systems integrator that has quite a few customers we are supporting. Most of our customers are small manufacturing companies, that don’t have hardware onsite to do GIT control. So, we host their projects in our Docker environment so we can do development work outside of their ‘production’ network.

We need to start tracking Ignition templates and what the younger engineers are doing as we have found easter eggs in most projects.

  • We host GITea locally on our development network

  • The Dev gateways are in Docker, mapped to Git-tracked folders

  • Engineers would use VSCode for GIT + Designer on Windows VMs that tie to the local docker projects.


Workflow

  1. git checkout -b feature/fix-bug

  2. Make changes in Designer

  3. git push then merge to main

  4. PowerShell script could pull main andzip the project or is it a manual export of resources from Designer.

  5. Take.zip and import into site

The above workflow is the only way I can see getting the changes to the site after they have been tested locally. Also becomes tricky if there is onsite work and nobody updates our development network the two could get out of sync.

Is there a better way to handle this type of GIT control?

Most of the videos and or Ignition Deployment Guide seem tailored to large companies that would have dev, test, prod servers onsite.

Would be nice to have a community .gitignore file as well!