{"id":1196,"date":"2023-02-15T10:29:00","date_gmt":"2023-02-15T09:29:00","guid":{"rendered":"https:\/\/nubisoft.io\/blog\/?p=1196"},"modified":"2026-02-10T09:38:04","modified_gmt":"2026-02-10T08:38:04","slug":"gematik-ti-ru-environment-in-ci-cd-pipeline","status":"publish","type":"post","link":"https:\/\/nubisoft.io\/blog\/gematik-ti-ru-environment-in-ci-cd-pipeline\/","title":{"rendered":"Gematik TI RU environment used in CI\/CD pipeline? Yes, that&#8217;s feasible!"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">In this blog post, we explore integration of Gematik TI-RU Environment in a CI\/CD pipeline and its profound implications for healthcare application development. We delve into the key concepts behind CI\/CD pipelines, the significance of Gematik TI-RU Environment in the healthcare domain, and the steps involved in seamlessly automating the entire development and deployment process.<\/h2>\n\n\n\n<p>Developing constantly evolving software is quite a challenge. How to deliver new functionality without breaking existing ones and avoid <a href=\"https:\/\/nubisoft.io\/blog\/how-to-deal-with-non-reproducible-bugs-in-java-web-applications\/\">debugging nasty bugs in production<\/a>? The answer seems to be very easy &#8211; you have to test your application&#8217;s code very well. Here at NubiSoft, we are always looking forward to using TDD during the development process because it brings a lot of advantages. You can spot bugs in the early phase and prevent them to be deployed to production. Moreover, you can add or change functionalities without getting a heart attack during the deployment of a new version of the software. Finally, well-written tests become a documentation of the code base, helping to understand it better and maintain it in the longer term. Unfortunately, the test coverage is not the only factor always and it&#8217;s not that easy when it comes to developing healthcare e-services for Germany.<\/p>\n\n\n\n<p>With one of our customers from Germany, our team was challenged with designing, developing, and providing an application called <strong>VOS<\/strong> (<em><strong>Verordnungssoftware<\/strong><\/em>) whose primary goal is to deal with e-prescriptions as well as with the treatment plan for patients. Once you get to know <a href=\"https:\/\/nubisoft.io\/blog\/e-prescription-how-does-it-actually-work\/\" data-type=\"post\" data-id=\"1165\">how e-prescription works in Germany<\/a>, you instantly see how many things have to be tested:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ability to read, produce and manipulate documents based on German <strong>FHIR<\/strong> format,<\/li>\n\n\n\n<li>data transmission between <strong>VOS<\/strong> and <strong>PVS<\/strong> (<strong>Praxisverwaltungssysteme<\/strong>) systems,<\/li>\n\n\n\n<li>communication correctness between <strong>VOS<\/strong> software and third-party hardware devices such as connectors and card terminals,<\/li>\n\n\n\n<li>integration with external services and capabilities to transmit data to and from Gematik cloud components (<strong>Identity Provider FD<\/strong>, <strong>e-Rezept FD<\/strong>, etc.).<\/li>\n<\/ul>\n\n\n\n<p>When it comes to the e-prescription system in Germany, Gematik enables three separated environments: <strong>TITUS<\/strong> (test environment), <strong>RU<\/strong> (<em><strong>Referenzumgebung<\/strong><\/em>, reference environment), and <strong>PU<\/strong> (<em><strong>Produktionsumgebung<\/strong><\/em>, production environment). From the testing perspective, <strong>TITUS<\/strong> and <strong>RU<\/strong> look very interesting.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Gematik TITUS vs RU environment<\/h2>\n\n\n\n<p>In order to access the test environment, you can buy a license from <strong>Gematik<\/strong> for a <strong><a href=\"https:\/\/fachportal.gematik.de\/gematik-onlineshop\/titus#c4479\" data-type=\"URL\" data-id=\"https:\/\/fachportal.gematik.de\/gematik-onlineshop\/titus#c4479\" target=\"_blank\" rel=\"noreferrer noopener\">Titus<\/a><\/strong> service, which brings you accessibility to all of the needed components including:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>virtualized connector component provided by <strong>Gematik<\/strong>,<\/li>\n\n\n\n<li>virtualized card terminal component provided by <strong>Gematik<\/strong>,<\/li>\n\n\n\n<li><strong>Gematik<\/strong> <strong>TI<\/strong> services (<strong>IDP<\/strong>, <strong>e-Prescription<\/strong>, etc.) &#8211; accessible directly via the Internet connection.<\/li>\n<\/ul>\n\n\n\n<p>On the other hand, access to the <a rel=\"noreferrer noopener\" href=\"https:\/\/wiki.gematik.de\/display\/RUAAS\/RU+as+a+Service\" data-type=\"URL\" data-id=\"https:\/\/wiki.gematik.de\/display\/RUAAS\/RU+as+a+Service\" target=\"_blank\">reference environment<\/a> connection is established through third-party <strong>RU<\/strong> access providers. The architecture of the <strong>RU<\/strong> environment is similar to <strong>TITUS<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>physical or virtual connector device provided by your <strong>RU<\/strong> (<strong>Referenzumgebung<\/strong>) enabler,<\/li>\n\n\n\n<li>physical card terminal device supplied by third-party manufacturers,<\/li>\n\n\n\n<li><strong>Gematik<\/strong> <strong>TI<\/strong> services (<strong>IDP<\/strong>, <strong>e-Prescription<\/strong>) &#8211; accessible through <strong>RU<\/strong> (<strong>Referenzumgebung<\/strong>) provider via VPN connection.<\/li>\n<\/ul>\n\n\n\n<p>Despite <strong>PVS<\/strong> &#8211; <strong>VOS<\/strong> communication flow, seems like all of the mentioned points can be tested via <strong>TITUS<\/strong> service. So why do we have to even bother to use the RU environment? The devil is in the details and the fact that in <strong>TITUS<\/strong> service, some of the operations with connector (PIN prompts, signing documents using HBA cards, and so on) are performed in a simulated manner, meaning you can&#8217;t test your application behavior in some cases (e.g. wrong PIN entered, timeout occurred during signature). Also, some of the connector capabilities are entirely disabled (comfort signature management, changing a PIN). Finally, connectors and card terminals used on <strong>RU<\/strong> (<strong>Referenzumgebung<\/strong>) are the same which are used in the <strong>PU<\/strong> (<strong>Produktionsumgebung<\/strong>) environment by practitioners in their workplaces.  Therefore, using the <strong>RU<\/strong> (<strong>Referenzumgebung<\/strong>) environment is the only way to ensure, that your application is likely to work in the production environment as well.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to use the Gematik TI <strong>Referenzumgebung<\/strong> environment in CI\/CD pipeline?<\/h2>\n\n\n\n<p>Utilizing reference environment capabilities in the testing process improves your application stability in terms of being consistent with the production environment. However, it also brings some problems, that have to be solved:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Gematik Services are accessible only through an enabler VPN connection, so you have to use this VPN connection on every machine which should communicate with <strong>RU<\/strong> (<strong>Referenzumgebung<\/strong>) services.<\/li>\n\n\n\n<li>Card terminal actions are not simulated anymore, so you have to perform them manually.<\/li>\n<\/ul>\n\n\n\n<p>Our <strong>RU<\/strong> (<strong>Referenzumgebung<\/strong>) enabler is not supporting multiple simultaneous VPN connections so we have to share the same VPN connection across all of the devices, CI\/CD runners, and deployment nodes.  <\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"625\" data-id=\"1254\" src=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2023\/05\/Frame-2-1-1024x625.png\" alt=\"CI\/CD pipeline utilizing Card Terminal and Gematik Reference Environment\" class=\"wp-image-1254\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2023\/05\/Frame-2-1-1024x625.png 1024w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2023\/05\/Frame-2-1-300x183.png 300w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2023\/05\/Frame-2-1-768x468.png 768w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2023\/05\/Frame-2-1.png 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/figure>\n\n\n\n<p>We solved the first problem by establishing a Multi-Hop VPN connection. Therefore, every machine connected to our Intranet network (e.g. developer&#8217;s computer, <a href=\"https:\/\/nubisoft.io\/blog\/configuring-gitlab-runner-for-node-projects\/\" data-type=\"post\" data-id=\"315\">CI\/CD runner<\/a>, card terminal) is also connected to the <strong>RU<\/strong> (<strong>Referenzumgebung<\/strong>) environment out of the box. That&#8217;s really cool but the second problem remains. How team developers can perform PIN verification when they are not actually having physical access to the terminal? Furthermore, what about PIN verification in the terminal in the <a href=\"https:\/\/nubisoft.io\/blog\/robust-ci-cd-pipelines-for-node-based-projects\/\" data-type=\"post\" data-id=\"289\">automated CI\/CD test pipeline<\/a>? Fortunately, the card terminal device gives the opportunity to verify the PIN using the terminal\u2019s Remote API interface. Thus, we decided to develop an extra Intranet component responsible for hooking to the terminal API, listening for PIN requests, and performing PIN verification whenever it is needed. Obviously, this component is fully configurable and can be temporarily disabled if you want to perform PIN verification and test your application manually.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"625\" src=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2023\/05\/Frame-1-1024x625.png\" alt=\"Automated PIN verification.\" class=\"wp-image-1253\" srcset=\"https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2023\/05\/Frame-1-1024x625.png 1024w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2023\/05\/Frame-1-300x183.png 300w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2023\/05\/Frame-1-768x469.png 768w, https:\/\/nubisoft.io\/blog\/wp-content\/uploads\/2023\/05\/Frame-1.png 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Built infrastructure is used by many developers at NubiSoft on a daily basis, helping them and our customers to build fast-growing and rapidly-changing software with desired reliability and stability.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<p>In conclusion, integrating Gematik TI-RU Environment in a CI\/CD pipeline fits to our innovative approach to healthcare application development. It empowers developers and healthcare organizations we work with to streamline their software development processes, adhere to regulatory requirements, and deliver patient-centric software solutions more efficiently.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this blog post, we explore integration of Gematik TI-RU Environment in a CI\/CD pipeline and its profound implications for healthcare application development. We delve into the key concepts behind CI\/CD pipelines, the significance of Gematik TI-RU Environment in the healthcare domain, and the steps involved in seamlessly automating the entire development and deployment process. [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":1251,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_case_study_excerpt":"","footnotes":""},"categories":[55,221],"tags":[48,47,334,254],"class_list":["post-1196","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops","category-healthcare","tag-cd","tag-ci","tag-e-prescription","tag-gematik"],"_links":{"self":[{"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/posts\/1196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/comments?post=1196"}],"version-history":[{"count":24,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/posts\/1196\/revisions"}],"predecessor-version":[{"id":4710,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/posts\/1196\/revisions\/4710"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/media\/1251"}],"wp:attachment":[{"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/media?parent=1196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/categories?post=1196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nubisoft.io\/blog\/wp-json\/wp\/v2\/tags?post=1196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}