{"id":19881,"date":"2020-07-28T06:50:23","date_gmt":"2020-07-28T04:50:23","guid":{"rendered":"https:\/\/orcharhino.com\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline-2\/"},"modified":"2026-08-04T14:35:31","modified_gmt":"2026-08-04T12:35:31","slug":"docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline-2","status":"publish","type":"post","link":"https:\/\/orcharhino.com\/en\/resources\/blog\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\/","title":{"rendered":"DocOps at ATIX \u2013 the test stage: Adding \u201amake linkcheck\u2018 to our Documentation Gitlab Pipeline"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">This short blog series will explain how we automatically test, build, and deploy documentation mostly using vim, git, sphinx, docker, and gitlab. This blog article describes how to use \u2018make linkcheck\u2019 and add it to our internal Gitlab pipeline.<\/p>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\t\t<div data-elementor-type=\"container\" data-elementor-id=\"30292\" class=\"elementor elementor-30292 elementor-30285\" data-elementor-post-type=\"elementor_library\">\n\t\t\t\t<div class=\"elementor-element elementor-element-34d1a11 e-flex e-con-boxed e-con e-parent\" data-id=\"34d1a11\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-8ef645c e-con-full e-flex e-con e-child\" data-id=\"8ef645c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8a11360 dce_masking-none elementor-widget elementor-widget-image\" data-id=\"8a11360\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/orcharhino.com\/en\/solutions\/digital-sovereignty\/whitepaper-digital-sovereignty-in-the-it-infrastructure\/?utm_medium=blog_in-content_01\">\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/orcharhino.com\/wp-content\/smush-webp\/elementor\/thumbs\/img_whitepaper_digital_sovereignty-rk0m3y4axo3zvj0lmoj9wwxvvdg1a89fqno4dft9b0.png.webp\" title=\"img_whitepaper_digital_sovereignty\" alt=\"img_whitepaper_digital_sovereignty\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f84a375 e-con-full e-flex e-con e-child\" data-id=\"f84a375\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e7bb13b elementor-widget elementor-widget-text-editor\" data-id=\"e7bb13b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><strong>Who controls your IT &#8211; you or your dependencies?<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-387deb8 elementor-widget elementor-widget-text-editor\" data-id=\"387deb8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Read the free white paper to find out how to identify critical dependencies, make your infrastructure resilient and regain full control over operations, updates and automation.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5688a81 elementor-widget elementor-widget-text-editor\" data-id=\"5688a81\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"662\" data-end=\"696\"><a href=\"https:\/\/orcharhino.com\/en\/solutions\/digital-sovereignty\/whitepaper-digital-sovereignty-in-the-it-infrastructure\/?utm_medium=blog_in-content_01\" target=\"_blank\" rel=\"noopener\"><strong data-start=\"662\" data-end=\"696\">Download whitepaper now<\/strong><\/a><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Currently, our\u00a0<code>test<\/code>\u00a0stage only contains one job: run\u00a0<code>make spellcheck<\/code>.<br>Now, we want to extend our test stage with the\u00a0<code>linkcheck<\/code>\u00a0make target.<br>All make targets can be viewed by simply running\u00a0<code>make<\/code>\u00a0in the Git directory which houses the\u00a0<code>Makefile<\/code>.<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Running it locally saves the output to\u00a0<code>_build\/linkcheck\/output.txt<\/code>\u00a0and exits with either\u00a0<code>0<\/code>\u00a0or\u00a0<code>1<\/code>\u00a0as you\u2019d expect.<br>Our current pipeline as described in<br><code>.Gitlab-ci.yml<\/code>\u00a0looks as follows:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>---\nstages:\n- test\n- build\n- deploy\n\nvariables:\nREGISTRY: registry.example.com\nACCEPTED_WARNING: 'WARNING: toctree contains reference to excluded document ''sources\\\/privacy_policy'''\n\n.build_image:\ntags:\n- docker\n- dev_infra\nimage: ${REGISTRY}\/debian\/buster_slim\/sphinx_doc_builder:master\nbefore_script:\n- pip3 install -r requirements.txt\n\n.test:\nextends: .build_image\nstage: test\nallow_failure: true\n\ntest:spelling:\nextends: .test\nvariables:\nOUTPUT_FILE: \"${CI_BUILDS_DIR}\/${CI_PROJECT_PATH}\/_build\/spelling\/output.txt\"\nscript:\n- make spelling\n- cat \"${OUTPUT_FILE}\"\n- '&#091;&#091; $(wc -l &lt; \"${OUTPUT_FILE}\") -le 0 ]]'<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The rest of the file will be displayed in the following articles.<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Our pipeline is separated into three stages as outlined&nbsp;<a href=\"https:\/\/orcharhino.com\/docops-at-atix-automatically-building-documentation-using-gitlab-pipelines-and-sphinx\/\">in the first article<\/a>.<br>Two variables are set: the URL to our container registry and an accepted warning which we already expect and are fine with.<br>For every job, we basically start a&nbsp;<a href=\"https:\/\/www.docker.com\/\">Docker<\/a>&nbsp;container and install Sphinx including its requirements which are stored in Git as&nbsp;<code>requirements.txt<\/code>.<br>The test stage extends the&nbsp;<code>build_image<\/code>&nbsp;part and is allowed to fail, i.e. other stages will run even if there are spelling errors.<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The Docker image is built in another Gitlab pipeline and stored\u00a0<a href=\"https:\/\/docs.gitlab.com\/ee\/user\/packages\/container_registry\/\">in our internal Gitlab Container Registry<\/a>.<br>This means that not all required packages have to be installed with each run, only the ones defined in\u00a0<code>requirements.txt<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now, let\u2019s add a second job to the test stage.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>---\ntest:linkcheck:\nextends: .test\nvariables:\nOUTPUT_FILE: \"${CI_BUILDS_DIR}\/${CI_PROJECT_PATH}\/_build\/linkcheck\/output.txt\"\nscript:\n- make linkcheck 2> >(tee errors.txt)\n- cat errors.txt\n- sed -i \"\/${ACCEPTED_WARNING}\/d\" errors.txt\n- '&#091;&#091; $(wc -l &lt; \"errors.txt\") -le 0 ]]' ---<\/code><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This job simply appends the yaml code shown before.<br>The linkcheck job also extends the\u00a0<code>.test<\/code>\u00a0part.<br>A variable is defined to save its output to\u00a0<code>_build\/linkcheck\/output.txt<\/code>.<br>The script is comparable to the spelling job: it runs the make target\u00a0<code>linkcheck<\/code>\u00a0and splits the standard output and error to console and a file.<br>The file is then printed to stdout to view it directly in the Gitlab console for said job.<br>Then, we remove an accepted warning (this comes from building two different HTML versions for the website and\u00a0<code>.rpm<\/code>\u00a0package with one excluding a file that\u2019s included in the table of contents) in the file.<br>Last, we count the lines of said file.<br>If it\u2019s zero, exit with\u00a0<code>0<\/code>\u00a0(as in\u00a0<code>everything's fine<\/code>), if not, exit with\u00a0<code>1<\/code>\u00a0as in\u00a0<code>there's been an error<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Due to the\u00a0<code>allow_failure: true<\/code>, the next stage will run irrespective of the results of the test stage.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The next article will cover our build stage.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/orcharhino.com\/wp-content\/smush-webp\/2020\/07\/blog_gitlab_pipeline_2_gitlab_save_build_artifact-1030x664.png.webp\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1030\" height=\"664\" src=\"https:\/\/orcharhino.com\/wp-content\/smush-webp\/2020\/07\/blog_gitlab_pipeline_2_gitlab_save_build_artifact-1030x664.png.webp\" alt=\"\" class=\"wp-image-2687\" srcset=\"https:\/\/orcharhino.com\/wp-content\/smush-webp\/2020\/07\/blog_gitlab_pipeline_2_gitlab_save_build_artifact-1030x664.png.webp 1030w, https:\/\/orcharhino.com\/wp-content\/smush-webp\/2020\/07\/blog_gitlab_pipeline_2_gitlab_save_build_artifact-300x193.png.webp 300w, https:\/\/orcharhino.com\/wp-content\/smush-webp\/2020\/07\/blog_gitlab_pipeline_2_gitlab_save_build_artifact-768x495.png.webp 768w, https:\/\/orcharhino.com\/wp-content\/smush-webp\/2020\/07\/blog_gitlab_pipeline_2_gitlab_save_build_artifact-1536x991.png.webp 1536w, https:\/\/orcharhino.com\/wp-content\/smush-webp\/2020\/07\/blog_gitlab_pipeline_2_gitlab_save_build_artifact-2048x1321.png.webp 2048w, https:\/\/orcharhino.com\/wp-content\/smush-webp\/2020\/07\/blog_gitlab_pipeline_2_gitlab_save_build_artifact-1500x967.png.webp 1500w, https:\/\/orcharhino.com\/wp-content\/smush-webp\/2020\/07\/blog_gitlab_pipeline_2_gitlab_save_build_artifact-705x455.png.webp 705w, https:\/\/orcharhino.com\/wp-content\/smush-webp\/2020\/07\/blog_gitlab_pipeline_2_gitlab_save_build_artifact-450x290.png.webp 450w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/a><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>This short blog series will explain how we automatically test, build, and deploy documentation mostly using vim, git, sphinx, docker, and gitlab. This blog article describes how to use \u2018make linkcheck\u2019 and add it to our internal Gitlab pipeline. Currently, our\u00a0test\u00a0stage only contains one job: run\u00a0make spellcheck.Now, we want to extend our test stage with [&hellip;]<\/p>\n","protected":false},"author":1095,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[104],"tags":[],"pillars":[],"rolle":[],"use-case-kategorie":[],"class_list":["post-19881","post","type-post","status-publish","format-standard","hentry","category-blog-en"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.5 (Yoast SEO v28.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Add make linkcheck to Your GitLab Pipeline | orcharhino<\/title>\n<meta name=\"description\" content=\"Learn how ATIX adds make linkcheck as a test job to its GitLab CI pipeline to catch broken links in Sphinx documentation \u2013 with full .gitlab-ci.yml code.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/orcharhino.com\/en\/resources\/blog\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DocOps at ATIX \u2013 the test stage: Adding \u201amake linkcheck\u2018 to our Documentation Gitlab Pipeline\" \/>\n<meta property=\"og:description\" content=\"Learn how ATIX adds make linkcheck as a test job to its GitLab CI pipeline to catch broken links in Sphinx documentation \u2013 with full .gitlab-ci.yml code.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/orcharhino.com\/en\/resources\/blog\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\/\" \/>\n<meta property=\"og:site_name\" content=\"orcharhino\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/ATIXDE\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-07-28T04:50:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-04T12:35:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/orcharhino.com\/wp-content\/uploads\/2020\/07\/blog_gitlab_pipeline_2_gitlab_save_build_artifact-1030x664.png\" \/>\n<meta name=\"author\" content=\"Dev Medienstuermer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@orcharhino\" \/>\n<meta name=\"twitter:site\" content=\"@orcharhino\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Dev Medienstuermer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/orcharhino.com\\\/en\\\/resources\\\/blog\\\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/orcharhino.com\\\/en\\\/resources\\\/blog\\\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\\\/\"},\"author\":{\"name\":\"Dev Medienstuermer\",\"@id\":\"https:\\\/\\\/orcharhino.com\\\/en\\\/#\\\/schema\\\/person\\\/7d02c0c1f109e932aec93630ecf98238\"},\"headline\":\"DocOps at ATIX \u2013 the test stage: Adding \u201amake linkcheck\u2018 to our Documentation Gitlab Pipeline\",\"datePublished\":\"2020-07-28T04:50:23+00:00\",\"dateModified\":\"2026-08-04T12:35:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/orcharhino.com\\\/en\\\/resources\\\/blog\\\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\\\/\"},\"wordCount\":407,\"publisher\":{\"@id\":\"https:\\\/\\\/orcharhino.com\\\/en\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/orcharhino.com\\\/en\\\/resources\\\/blog\\\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/orcharhino.com\\\/wp-content\\\/uploads\\\/2020\\\/07\\\/blog_gitlab_pipeline_2_gitlab_save_build_artifact-1030x664.png\",\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/orcharhino.com\\\/en\\\/resources\\\/blog\\\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\\\/\",\"url\":\"https:\\\/\\\/orcharhino.com\\\/en\\\/resources\\\/blog\\\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\\\/\",\"name\":\"Add make linkcheck to Your GitLab Pipeline | orcharhino\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/orcharhino.com\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/orcharhino.com\\\/en\\\/resources\\\/blog\\\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/orcharhino.com\\\/en\\\/resources\\\/blog\\\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/orcharhino.com\\\/wp-content\\\/uploads\\\/2020\\\/07\\\/blog_gitlab_pipeline_2_gitlab_save_build_artifact-1030x664.png\",\"datePublished\":\"2020-07-28T04:50:23+00:00\",\"dateModified\":\"2026-08-04T12:35:31+00:00\",\"description\":\"Learn how ATIX adds make linkcheck as a test job to its GitLab CI pipeline to catch broken links in Sphinx documentation \u2013 with full .gitlab-ci.yml code.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/orcharhino.com\\\/en\\\/resources\\\/blog\\\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/orcharhino.com\\\/en\\\/resources\\\/blog\\\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/orcharhino.com\\\/en\\\/resources\\\/blog\\\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\\\/#primaryimage\",\"url\":\"https:\\\/\\\/orcharhino.com\\\/wp-content\\\/uploads\\\/2020\\\/07\\\/blog_gitlab_pipeline_2_gitlab_save_build_artifact-1030x664.png\",\"contentUrl\":\"https:\\\/\\\/orcharhino.com\\\/wp-content\\\/uploads\\\/2020\\\/07\\\/blog_gitlab_pipeline_2_gitlab_save_build_artifact-1030x664.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/orcharhino.com\\\/en\\\/resources\\\/blog\\\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"orcharhino\",\"item\":\"https:\\\/\\\/orcharhino.com\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DocOps at ATIX \u2013 the test stage: Adding \u201amake linkcheck\u2018 to our Documentation Gitlab Pipeline\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/orcharhino.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/orcharhino.com\\\/en\\\/\",\"name\":\"orcharhino\",\"description\":\"one tool to rule them all\",\"publisher\":{\"@id\":\"https:\\\/\\\/orcharhino.com\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/orcharhino.com\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/orcharhino.com\\\/en\\\/#organization\",\"name\":\"orcharhino\",\"url\":\"https:\\\/\\\/orcharhino.com\\\/en\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/orcharhino.com\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/orcharhino.com\\\/wp-content\\\/uploads\\\/2024\\\/12\\\/orcharhino_mask.svg\",\"contentUrl\":\"https:\\\/\\\/orcharhino.com\\\/wp-content\\\/uploads\\\/2024\\\/12\\\/orcharhino_mask.svg\",\"width\":508,\"height\":508,\"caption\":\"orcharhino\"},\"image\":{\"@id\":\"https:\\\/\\\/orcharhino.com\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/ATIXDE\\\/\",\"https:\\\/\\\/x.com\\\/orcharhino\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/atix-ag\\\/\"],\"description\":\"orcharhino erm\u00f6glicht das automatisierte Deployment \u00fcber alle Betriebssysteme hinweg und die anschlie\u00dfende Verwaltung der Systeme mit Release- und Patch Management. Die Infrastruktur l\u00e4sst sich dabei eng entlang der eigenen Bed\u00fcrfnisse ausrichten. IT-Organisationen profitieren insbesondere von der Technologie- und Herstellerunabh\u00e4ngigkeit sowie von st\u00e4ndig aktualisierten Sicherheitsupdates. orcharhino ist als Open-Source-L\u00f6sung f\u00fcr Unternehmen besonders flexibel und unbegrenzt skalierbar, unabh\u00e4ngig von der Gr\u00f6\u00dfe der Infrastruktur oder der Anzahl der Devices \u2013 egal ob lokal oder global, in der Cloud oder On-Premises.\",\"email\":\"info@atix.de\",\"telephone\":\"+49 89 4523538-0\",\"legalName\":\"ATIX Informationstechnologie und Consulting AG\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/orcharhino.com\\\/en\\\/#\\\/schema\\\/person\\\/7d02c0c1f109e932aec93630ecf98238\",\"name\":\"Dev Medienstuermer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a23619ea28283064311a0d1fe283044ac4eecabc19235c5c77dc62e2c5565de4?s=96&d=blank&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a23619ea28283064311a0d1fe283044ac4eecabc19235c5c77dc62e2c5565de4?s=96&d=blank&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a23619ea28283064311a0d1fe283044ac4eecabc19235c5c77dc62e2c5565de4?s=96&d=blank&r=g\",\"caption\":\"Dev Medienstuermer\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Add make linkcheck to Your GitLab Pipeline | orcharhino","description":"Learn how ATIX adds make linkcheck as a test job to its GitLab CI pipeline to catch broken links in Sphinx documentation \u2013 with full .gitlab-ci.yml code.","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:\/\/orcharhino.com\/en\/resources\/blog\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\/","og_locale":"en_US","og_type":"article","og_title":"DocOps at ATIX \u2013 the test stage: Adding \u201amake linkcheck\u2018 to our Documentation Gitlab Pipeline","og_description":"Learn how ATIX adds make linkcheck as a test job to its GitLab CI pipeline to catch broken links in Sphinx documentation \u2013 with full .gitlab-ci.yml code.","og_url":"https:\/\/orcharhino.com\/en\/resources\/blog\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\/","og_site_name":"orcharhino","article_publisher":"https:\/\/www.facebook.com\/ATIXDE\/","article_published_time":"2020-07-28T04:50:23+00:00","article_modified_time":"2026-08-04T12:35:31+00:00","og_image":[{"url":"https:\/\/orcharhino.com\/wp-content\/uploads\/2020\/07\/blog_gitlab_pipeline_2_gitlab_save_build_artifact-1030x664.png","type":"","width":"","height":""}],"author":"Dev Medienstuermer","twitter_card":"summary_large_image","twitter_creator":"@orcharhino","twitter_site":"@orcharhino","twitter_misc":{"Written by":"Dev Medienstuermer","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/orcharhino.com\/en\/resources\/blog\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\/#article","isPartOf":{"@id":"https:\/\/orcharhino.com\/en\/resources\/blog\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\/"},"author":{"name":"Dev Medienstuermer","@id":"https:\/\/orcharhino.com\/en\/#\/schema\/person\/7d02c0c1f109e932aec93630ecf98238"},"headline":"DocOps at ATIX \u2013 the test stage: Adding \u201amake linkcheck\u2018 to our Documentation Gitlab Pipeline","datePublished":"2020-07-28T04:50:23+00:00","dateModified":"2026-08-04T12:35:31+00:00","mainEntityOfPage":{"@id":"https:\/\/orcharhino.com\/en\/resources\/blog\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\/"},"wordCount":407,"publisher":{"@id":"https:\/\/orcharhino.com\/en\/#organization"},"image":{"@id":"https:\/\/orcharhino.com\/en\/resources\/blog\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\/#primaryimage"},"thumbnailUrl":"https:\/\/orcharhino.com\/wp-content\/uploads\/2020\/07\/blog_gitlab_pipeline_2_gitlab_save_build_artifact-1030x664.png","articleSection":["Blog"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/orcharhino.com\/en\/resources\/blog\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\/","url":"https:\/\/orcharhino.com\/en\/resources\/blog\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\/","name":"Add make linkcheck to Your GitLab Pipeline | orcharhino","isPartOf":{"@id":"https:\/\/orcharhino.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/orcharhino.com\/en\/resources\/blog\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\/#primaryimage"},"image":{"@id":"https:\/\/orcharhino.com\/en\/resources\/blog\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\/#primaryimage"},"thumbnailUrl":"https:\/\/orcharhino.com\/wp-content\/uploads\/2020\/07\/blog_gitlab_pipeline_2_gitlab_save_build_artifact-1030x664.png","datePublished":"2020-07-28T04:50:23+00:00","dateModified":"2026-08-04T12:35:31+00:00","description":"Learn how ATIX adds make linkcheck as a test job to its GitLab CI pipeline to catch broken links in Sphinx documentation \u2013 with full .gitlab-ci.yml code.","breadcrumb":{"@id":"https:\/\/orcharhino.com\/en\/resources\/blog\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/orcharhino.com\/en\/resources\/blog\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/orcharhino.com\/en\/resources\/blog\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\/#primaryimage","url":"https:\/\/orcharhino.com\/wp-content\/uploads\/2020\/07\/blog_gitlab_pipeline_2_gitlab_save_build_artifact-1030x664.png","contentUrl":"https:\/\/orcharhino.com\/wp-content\/uploads\/2020\/07\/blog_gitlab_pipeline_2_gitlab_save_build_artifact-1030x664.png"},{"@type":"BreadcrumbList","@id":"https:\/\/orcharhino.com\/en\/resources\/blog\/docops-at-atix-the-test-stage-adding-make-linkcheck-to-our-documentation-gitlab-pipeline\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"orcharhino","item":"https:\/\/orcharhino.com\/en\/"},{"@type":"ListItem","position":2,"name":"DocOps at ATIX \u2013 the test stage: Adding \u201amake linkcheck\u2018 to our Documentation Gitlab Pipeline"}]},{"@type":"WebSite","@id":"https:\/\/orcharhino.com\/en\/#website","url":"https:\/\/orcharhino.com\/en\/","name":"orcharhino","description":"one tool to rule them all","publisher":{"@id":"https:\/\/orcharhino.com\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/orcharhino.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/orcharhino.com\/en\/#organization","name":"orcharhino","url":"https:\/\/orcharhino.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/orcharhino.com\/en\/#\/schema\/logo\/image\/","url":"https:\/\/orcharhino.com\/wp-content\/uploads\/2024\/12\/orcharhino_mask.svg","contentUrl":"https:\/\/orcharhino.com\/wp-content\/uploads\/2024\/12\/orcharhino_mask.svg","width":508,"height":508,"caption":"orcharhino"},"image":{"@id":"https:\/\/orcharhino.com\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/ATIXDE\/","https:\/\/x.com\/orcharhino","https:\/\/www.linkedin.com\/company\/atix-ag\/"],"description":"orcharhino erm\u00f6glicht das automatisierte Deployment \u00fcber alle Betriebssysteme hinweg und die anschlie\u00dfende Verwaltung der Systeme mit Release- und Patch Management. Die Infrastruktur l\u00e4sst sich dabei eng entlang der eigenen Bed\u00fcrfnisse ausrichten. IT-Organisationen profitieren insbesondere von der Technologie- und Herstellerunabh\u00e4ngigkeit sowie von st\u00e4ndig aktualisierten Sicherheitsupdates. orcharhino ist als Open-Source-L\u00f6sung f\u00fcr Unternehmen besonders flexibel und unbegrenzt skalierbar, unabh\u00e4ngig von der Gr\u00f6\u00dfe der Infrastruktur oder der Anzahl der Devices \u2013 egal ob lokal oder global, in der Cloud oder On-Premises.","email":"info@atix.de","telephone":"+49 89 4523538-0","legalName":"ATIX Informationstechnologie und Consulting AG"},{"@type":"Person","@id":"https:\/\/orcharhino.com\/en\/#\/schema\/person\/7d02c0c1f109e932aec93630ecf98238","name":"Dev Medienstuermer","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/a23619ea28283064311a0d1fe283044ac4eecabc19235c5c77dc62e2c5565de4?s=96&d=blank&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a23619ea28283064311a0d1fe283044ac4eecabc19235c5c77dc62e2c5565de4?s=96&d=blank&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a23619ea28283064311a0d1fe283044ac4eecabc19235c5c77dc62e2c5565de4?s=96&d=blank&r=g","caption":"Dev Medienstuermer"}}]}},"permalink_manager":null,"_links":{"self":[{"href":"https:\/\/orcharhino.com\/en\/wp-json\/wp\/v2\/posts\/19881","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/orcharhino.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/orcharhino.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/orcharhino.com\/en\/wp-json\/wp\/v2\/users\/1095"}],"replies":[{"embeddable":true,"href":"https:\/\/orcharhino.com\/en\/wp-json\/wp\/v2\/comments?post=19881"}],"version-history":[{"count":4,"href":"https:\/\/orcharhino.com\/en\/wp-json\/wp\/v2\/posts\/19881\/revisions"}],"predecessor-version":[{"id":30353,"href":"https:\/\/orcharhino.com\/en\/wp-json\/wp\/v2\/posts\/19881\/revisions\/30353"}],"wp:attachment":[{"href":"https:\/\/orcharhino.com\/en\/wp-json\/wp\/v2\/media?parent=19881"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/orcharhino.com\/en\/wp-json\/wp\/v2\/categories?post=19881"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/orcharhino.com\/en\/wp-json\/wp\/v2\/tags?post=19881"},{"taxonomy":"pillars","embeddable":true,"href":"https:\/\/orcharhino.com\/en\/wp-json\/wp\/v2\/pillars?post=19881"},{"taxonomy":"rolle","embeddable":true,"href":"https:\/\/orcharhino.com\/en\/wp-json\/wp\/v2\/rolle?post=19881"},{"taxonomy":"use-case-kategorie","embeddable":true,"href":"https:\/\/orcharhino.com\/en\/wp-json\/wp\/v2\/use-case-kategorie?post=19881"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}