{"id":3692,"date":"2020-05-25T07:00:29","date_gmt":"2020-05-25T06:00:29","guid":{"rendered":"https:\/\/www.diogonunes.com\/blog\/?p=3692"},"modified":"2020-06-01T10:47:53","modified_gmt":"2020-06-01T09:47:53","slug":"gitlab-pipeline-triggering-pipeline-sync","status":"publish","type":"post","link":"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/","title":{"rendered":"Pipeline triggering pipeline on GitLab"},"content":{"rendered":"<p><a href=\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/s270904456481439361_p798_i2_w1799.jpeg?ssl=1\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/s270904456481439361_p798_i2_w1799.jpeg?resize=580%2C344&#038;ssl=1\" alt=\"\" width=\"580\" height=\"344\" class=\"aligncenter size-large wp-image-3700\" srcset=\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/s270904456481439361_p798_i2_w1799.jpeg?resize=1024%2C607&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/s270904456481439361_p798_i2_w1799.jpeg?resize=400%2C237&amp;ssl=1 400w, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/s270904456481439361_p798_i2_w1799.jpeg?resize=768%2C456&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/s270904456481439361_p798_i2_w1799.jpeg?resize=1536%2C911&amp;ssl=1 1536w, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/s270904456481439361_p798_i2_w1799.jpeg?resize=1200%2C712&amp;ssl=1 1200w, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/s270904456481439361_p798_i2_w1799.jpeg?w=1799&amp;ssl=1 1799w, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/s270904456481439361_p798_i2_w1799.jpeg?w=1740&amp;ssl=1 1740w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p>Usually when configuring a GitLab pipeline (<code>.gitlab-ci.yml<\/code>) you only care about steps in your own pipeline. Sometimes however, you may want to trigger other pipelines (of other repositories) as a step of your own pipeline.<\/p>\n<p><!--more--><\/p>\n<blockquote>\n<p>Context: You have your app divided into multiple microservices\/repos. There&#8217;s another repo which contains a suite of End-to-End tests. That repo has a pipeline that, when triggered, runs the whole tests using the latest version of each app.<\/p>\n<p>Problem: At the end of your microservice&#8217;s pipeline, you deploy your latest version, and then you want to run the E2E pipeline, to make sure you didn&#8217;t break any previously working functionality. But that&#8217;s another repo&#8230;<\/p>\n<\/blockquote>\n<p>So the question is: <strong>how can you have a pipeline triggering another pipeline and <em>wait<\/em> for the result?<\/strong><\/p>\n<p><del>Officially, you can&#8217;t<\/del> At the time, we were not able to use <a href=\"https:\/\/docs.gitlab.com\/ee\/ci\/multi_project_pipelines.html\">the official way<\/a>. Luckily for us, <a href=\"https:\/\/gitlab.com\/finestructure\/pipeline-trigger\">Sven A. Schmidt created a workaround<\/a>. The example below was adapted from his solution:<\/p>\n<pre><code class=\"yaml\">variables:\n  GITLAB_API_PATH: \/api\/v4\/projects\n  GITLAB_HOST: TBD            # domain where your gitlab is hosted\n  PIPELINE_TRIGGER_IMAGE: registry.gitlab.com\/finestructure\/pipeline-trigger \n  # Secrets\n  PIPELINE_SERVICE_TOKEN: TBD # token of user that can invoke pipelines\n  PIPELINE_TRIGGER_TOKEN: TBD # token of the invoked repo, here's how http:\/\/tiny.cc\/2unvbz\n\ntrigger-pipeline:\n  image: $PIPELINE_TRIGGER_IMAGE\n  variables:\n    GIT_STRATEGY: none\n    TRIGGER_TARGET_REPO_ID: TBD # the GitLab ID of the repo you want to call\n  script:\n    - trigger --verbose -h $GITLAB_HOST -u $GITLAB_API_PATH\n      -a $TRIGGER_SOURCE_USER_TOKEN -p $TRIGGER_TARGET_REPO_TOKEN\n      -t master $TRIGGER_TARGET_REPO_ID\n      -e SOME_ENV_VAR=\"value goes here\" -e ANOTHER_ENV_VAR=$CAN_ALSO_READ_FROM_VARS\n<\/code><\/pre>\n<p>If you use this code you will create a job named <code>trigger-pipeline<\/code> in your pipeline A, that when executed will call a pipeline B (<code>TRIGGER_TARGET_REPO_ID<\/code>), and wait for that pipeline to finish.<\/p>\n<ul>\n<li>Don&#8217;t forget to replace the <code>TBD<\/code> (To Be Defined) values with your own configuration.<\/li>\n<li>I was a bit lost on how to create the <code>PIPELINE_TRIGGER_TOKEN<\/code>, then I <a href=\"http:\/\/tiny.cc\/2unvbz\">found this<\/a><\/li>\n<li>This code assumes you have GitLab self hosted. If not, you can remove the <code>-h $GITLAB_HOST -u $GITLAB_API_PATH<\/code> part.<\/li>\n<li>The end status of pipeline B will be the status of this job. So if pipeline B fails, this job will also fail.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Usually when configuring a GitLab pipeline (.gitlab-ci.yml) you only care about steps in your own pipeline. Sometimes however, you may want to trigger other pipelines (of other repositories) as a step of your own pipeline.<\/p>\n","protected":false},"author":1,"featured_media":3700,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[2],"tags":[77,29,76],"class_list":["post-3692","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech","tag-ci-pipelines","tag-coding","tag-gitlab"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Pipeline triggering pipeline on GitLab - The Geeky Gecko<\/title>\n<meta name=\"description\" content=\"How can you have a GitLab pipeline triggering another pipeline and wait for the result? Code snippet included.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pipeline triggering pipeline on GitLab - The Geeky Gecko\" \/>\n<meta property=\"og:description\" content=\"How can you have a GitLab pipeline triggering another pipeline and wait for the result? Code snippet included.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/\" \/>\n<meta property=\"og:site_name\" content=\"The Geeky Gecko\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-25T06:00:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-06-01T09:47:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/s270904456481439361_p798_i2_w1799.jpeg?fit=1799%2C1067&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1799\" \/>\n\t<meta property=\"og:image:height\" content=\"1067\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Diogo Nunes\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@dialexnunes\" \/>\n<meta name=\"twitter:site\" content=\"@dialexnunes\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Diogo Nunes\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/\"},\"author\":{\"name\":\"Diogo Nunes\",\"@id\":\"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/a6fa79b293f22912664654fcfbd2da0c\"},\"headline\":\"Pipeline triggering pipeline on GitLab\",\"datePublished\":\"2020-05-25T06:00:29+00:00\",\"dateModified\":\"2020-06-01T09:47:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/\"},\"wordCount\":266,\"publisher\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/a6fa79b293f22912664654fcfbd2da0c\"},\"image\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/s270904456481439361_p798_i2_w1799.jpeg?fit=1799%2C1067&ssl=1\",\"keywords\":[\"CI Pipelines\",\"coding\",\"GitLab\"],\"articleSection\":[\"Technology\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/\",\"url\":\"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/\",\"name\":\"Pipeline triggering pipeline on GitLab - The Geeky Gecko\",\"isPartOf\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/s270904456481439361_p798_i2_w1799.jpeg?fit=1799%2C1067&ssl=1\",\"datePublished\":\"2020-05-25T06:00:29+00:00\",\"dateModified\":\"2020-06-01T09:47:53+00:00\",\"description\":\"How can you have a GitLab pipeline triggering another pipeline and wait for the result? Code snippet included.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/#primaryimage\",\"url\":\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/s270904456481439361_p798_i2_w1799.jpeg?fit=1799%2C1067&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/s270904456481439361_p798_i2_w1799.jpeg?fit=1799%2C1067&ssl=1\",\"width\":1799,\"height\":1067},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.diogonunes.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Pipeline triggering pipeline on GitLab\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.diogonunes.com\/blog\/#website\",\"url\":\"https:\/\/www.diogonunes.com\/blog\/\",\"name\":\"The Geeky Gecko\",\"description\":\"The Geeky Gecko\",\"publisher\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/a6fa79b293f22912664654fcfbd2da0c\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.diogonunes.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/a6fa79b293f22912664654fcfbd2da0c\",\"name\":\"Diogo Nunes\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2026\/04\/Geeky-Gecko-2026-v2.png?fit=799%2C799&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2026\/04\/Geeky-Gecko-2026-v2.png?fit=799%2C799&ssl=1\",\"width\":799,\"height\":799,\"caption\":\"Diogo Nunes\"},\"logo\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/image\/\"},\"sameAs\":[\"http:\/\/www.diogonunes.com\",\"https:\/\/x.com\/dialexnunes\"],\"url\":\"https:\/\/www.diogonunes.com\/blog\/author\/diogo-nunes\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Pipeline triggering pipeline on GitLab - The Geeky Gecko","description":"How can you have a GitLab pipeline triggering another pipeline and wait for the result? Code snippet included.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/","og_locale":"en_US","og_type":"article","og_title":"Pipeline triggering pipeline on GitLab - The Geeky Gecko","og_description":"How can you have a GitLab pipeline triggering another pipeline and wait for the result? Code snippet included.","og_url":"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/","og_site_name":"The Geeky Gecko","article_published_time":"2020-05-25T06:00:29+00:00","article_modified_time":"2020-06-01T09:47:53+00:00","og_image":[{"width":1799,"height":1067,"url":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/s270904456481439361_p798_i2_w1799.jpeg?fit=1799%2C1067&ssl=1","type":"image\/jpeg"}],"author":"Diogo Nunes","twitter_card":"summary_large_image","twitter_creator":"@dialexnunes","twitter_site":"@dialexnunes","twitter_misc":{"Written by":"Diogo Nunes","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/#article","isPartOf":{"@id":"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/"},"author":{"name":"Diogo Nunes","@id":"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/a6fa79b293f22912664654fcfbd2da0c"},"headline":"Pipeline triggering pipeline on GitLab","datePublished":"2020-05-25T06:00:29+00:00","dateModified":"2020-06-01T09:47:53+00:00","mainEntityOfPage":{"@id":"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/"},"wordCount":266,"publisher":{"@id":"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/a6fa79b293f22912664654fcfbd2da0c"},"image":{"@id":"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/s270904456481439361_p798_i2_w1799.jpeg?fit=1799%2C1067&ssl=1","keywords":["CI Pipelines","coding","GitLab"],"articleSection":["Technology"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/","url":"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/","name":"Pipeline triggering pipeline on GitLab - The Geeky Gecko","isPartOf":{"@id":"https:\/\/www.diogonunes.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/#primaryimage"},"image":{"@id":"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/s270904456481439361_p798_i2_w1799.jpeg?fit=1799%2C1067&ssl=1","datePublished":"2020-05-25T06:00:29+00:00","dateModified":"2020-06-01T09:47:53+00:00","description":"How can you have a GitLab pipeline triggering another pipeline and wait for the result? Code snippet included.","breadcrumb":{"@id":"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/#primaryimage","url":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/s270904456481439361_p798_i2_w1799.jpeg?fit=1799%2C1067&ssl=1","contentUrl":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/s270904456481439361_p798_i2_w1799.jpeg?fit=1799%2C1067&ssl=1","width":1799,"height":1067},{"@type":"BreadcrumbList","@id":"https:\/\/www.diogonunes.com\/blog\/gitlab-pipeline-triggering-pipeline-sync\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.diogonunes.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Pipeline triggering pipeline on GitLab"}]},{"@type":"WebSite","@id":"https:\/\/www.diogonunes.com\/blog\/#website","url":"https:\/\/www.diogonunes.com\/blog\/","name":"The Geeky Gecko","description":"The Geeky Gecko","publisher":{"@id":"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/a6fa79b293f22912664654fcfbd2da0c"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.diogonunes.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/a6fa79b293f22912664654fcfbd2da0c","name":"Diogo Nunes","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2026\/04\/Geeky-Gecko-2026-v2.png?fit=799%2C799&ssl=1","contentUrl":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2026\/04\/Geeky-Gecko-2026-v2.png?fit=799%2C799&ssl=1","width":799,"height":799,"caption":"Diogo Nunes"},"logo":{"@id":"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/image\/"},"sameAs":["http:\/\/www.diogonunes.com","https:\/\/x.com\/dialexnunes"],"url":"https:\/\/www.diogonunes.com\/blog\/author\/diogo-nunes\/"}]}},"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/s270904456481439361_p798_i2_w1799.jpeg?fit=1799%2C1067&ssl=1","jetpack-related-posts":[{"id":4307,"url":"https:\/\/www.diogonunes.com\/blog\/ama-e2e-tests\/","url_meta":{"origin":3692,"position":0},"title":"7 questions we all had about end-to-end tests","author":"Diogo Nunes","date":"4 October, 2021","format":false,"excerpt":"The summary of an Ask Me Anything session I hosted at my company \ud83c\udfc6 This post was featured in Software Testing Weekly, #92 and Software Testing Notes, #28 What\u2019s the definition of E2E in frontend? I don't think there's a definition specific to frontend (BE). An end-to-end test interacts with\u2026","rel":"","context":"In &quot;Technology&quot;","block_context":{"text":"Technology","link":"https:\/\/www.diogonunes.com\/blog\/category\/tech\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/09\/Knowledge-Sharing-E2E-tests-1.jpg?fit=960%2C540&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/09\/Knowledge-Sharing-E2E-tests-1.jpg?fit=960%2C540&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/09\/Knowledge-Sharing-E2E-tests-1.jpg?fit=960%2C540&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/09\/Knowledge-Sharing-E2E-tests-1.jpg?fit=960%2C540&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":3702,"url":"https:\/\/www.diogonunes.com\/blog\/how-to-build-docker-image-cypress-tests\/","url_meta":{"origin":3692,"position":1},"title":"How to build a Docker image ready to run Cypress tests","author":"Diogo Nunes","date":"11 May, 2020","format":false,"excerpt":"My team decided to build a Docker image that contained Cypress, dependencies and all our end-to-end (E2E) tests. That way, anyone could simply pull the image and with a single command it was ready to run tests. Also, the developers and the CI pipeline we both using the same image,\u2026","rel":"","context":"In &quot;Technology&quot;","block_context":{"text":"Technology","link":"https:\/\/www.diogonunes.com\/blog\/category\/tech\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/cypress-on-docker.png?fit=1200%2C488&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/cypress-on-docker.png?fit=1200%2C488&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/cypress-on-docker.png?fit=1200%2C488&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/cypress-on-docker.png?fit=1200%2C488&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/cypress-on-docker.png?fit=1200%2C488&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":3756,"url":"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/","url_meta":{"origin":3692,"position":2},"title":"Infrastructure testing (Ruby): InSpec + Azure","author":"Diogo Nunes","date":"7 September, 2020","format":false,"excerpt":"Infra testing is mostly uncharted territory I once worked in a project that was all about DevOps, pipelines and bash scripts. At the time we didn't find many guides, so we developed our own test strategy. Context The project's goal was to create a collection of bash scripts that would\u2026","rel":"","context":"In &quot;Technology&quot;","block_context":{"text":"Technology","link":"https:\/\/www.diogonunes.com\/blog\/category\/tech\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/jakub-kriz-arOyDPUAJzc-unsplash-scaled.jpg?fit=1200%2C800&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/jakub-kriz-arOyDPUAJzc-unsplash-scaled.jpg?fit=1200%2C800&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/jakub-kriz-arOyDPUAJzc-unsplash-scaled.jpg?fit=1200%2C800&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/jakub-kriz-arOyDPUAJzc-unsplash-scaled.jpg?fit=1200%2C800&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/jakub-kriz-arOyDPUAJzc-unsplash-scaled.jpg?fit=1200%2C800&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":2702,"url":"https:\/\/www.diogonunes.com\/blog\/internet-button-tutorial-ide-atom-github\/","url_meta":{"origin":3692,"position":3},"title":"Internet Button: Web IDE, Atom, GitHub (tutorial #1)","author":"Diogo Nunes","date":"2 January, 2017","format":false,"excerpt":"First things first. Now that you can connect to your Photon, it's time to give it some intelligence - time to get coding! To manage that code let's create a git repo. GitHub The official documentation recommends that you fork their InternetButton repo. You don't have to, but it helps\u2026","rel":"","context":"In &quot;Technology&quot;","block_context":{"text":"Technology","link":"https:\/\/www.diogonunes.com\/blog\/category\/tech\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/08\/Internet-Button-Tutorial1.jpg?fit=984%2C656&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/08\/Internet-Button-Tutorial1.jpg?fit=984%2C656&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/08\/Internet-Button-Tutorial1.jpg?fit=984%2C656&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2016\/08\/Internet-Button-Tutorial1.jpg?fit=984%2C656&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":1154,"url":"https:\/\/www.diogonunes.com\/blog\/jcolor-java-color-messages-terminal\/","url_meta":{"origin":3692,"position":4},"title":"Colored messages on a terminal using Java","author":"Diogo Nunes","date":"27 October, 2014","format":false,"excerpt":"JColor is a Java library that offers an easy way to print colored messages on a terminal It all started when I needed to create an application with multiple levels of debug. The solution was an object (a Printer) with a maximum level of debug. Every debug message delivered to\u2026","rel":"","context":"In &quot;Technology&quot;","block_context":{"text":"Technology","link":"https:\/\/www.diogonunes.com\/blog\/category\/tech\/"},"img":{"alt_text":"JColor-logo","src":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2014\/10\/JColor-logo.png?fit=512%2C512&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":4585,"url":"https:\/\/www.diogonunes.com\/blog\/mentoring\/","url_meta":{"origin":3692,"position":5},"title":"Mentoring","author":"Diogo Nunes","date":"9 January, 2023","format":false,"excerpt":"Doing volunteer work brings me joy and fulfilment. My first event as a volunteer was in 2015 and I've been doing it ever since (if possible, multiples times a year). I only wish I started it sooner. One day I'll write about it. Today I want to tell you about\u2026","rel":"","context":"In &quot;Life&quot;","block_context":{"text":"Life","link":"https:\/\/www.diogonunes.com\/blog\/category\/life\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2022\/12\/neil-thomas-SIU1Glk6v5k-unsplash.jpg?fit=1200%2C800&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2022\/12\/neil-thomas-SIU1Glk6v5k-unsplash.jpg?fit=1200%2C800&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2022\/12\/neil-thomas-SIU1Glk6v5k-unsplash.jpg?fit=1200%2C800&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2022\/12\/neil-thomas-SIU1Glk6v5k-unsplash.jpg?fit=1200%2C800&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2022\/12\/neil-thomas-SIU1Glk6v5k-unsplash.jpg?fit=1200%2C800&ssl=1&resize=1050%2C600 3x"},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/posts\/3692","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/comments?post=3692"}],"version-history":[{"count":4,"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/posts\/3692\/revisions"}],"predecessor-version":[{"id":3894,"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/posts\/3692\/revisions\/3894"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/media\/3700"}],"wp:attachment":[{"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/media?parent=3692"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/categories?post=3692"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/tags?post=3692"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}