<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>CI/CD on KevinHorst IT</title><link>https://www.kevinhorst.de/tags/ci/cd/</link><description>Recent content in CI/CD on KevinHorst IT</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>info@kevinhorst.de (Kevin)</managingEditor><webMaster>info@kevinhorst.de (Kevin)</webMaster><copyright>This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.</copyright><lastBuildDate>Mon, 01 Jan 0001 00:00:00 +0000</lastBuildDate><atom:link href="https://www.kevinhorst.de/tags/ci/cd/index.xml" rel="self" type="application/rss+xml"/><item><title>Behind This Site: How It Gets Deployed</title><link>https://www.kevinhorst.de/posts/behind-this-site-deployment/</link><pubDate>Sat, 06 Dec 2025 00:00:00 +0000</pubDate><author>info@kevinhorst.de (Kevin)</author><guid>https://www.kevinhorst.de/posts/behind-this-site-deployment/</guid><description>&lt;p&gt;This site is hosted on &lt;a href="https://uberspace.de/" target="_blank" rel="noopener noreferrer"&gt;Uberspace&lt;/a&gt;
, a shared host without a ready-made PaaS pipeline. Instead of an out-of-the-box push-to-deploy, the deployment is split across several components: Codeberg as the Git host, Woodpecker CI as the build runner, and a small webhook on the Uberspace that picks up the finished build artefact. This article walks through how these components fit together.&lt;/p&gt;
&lt;p&gt;The full source for this site:&lt;/p&gt;
&lt;div class="codeberg-card-wrapper"&gt;
 &lt;a id="codeberg-5e831c713e04e10fda9b50cd8138e74f" target="_blank" href="https://codeberg.org/head1328/kevinhorst.de" class="cursor-pointer"&gt;
 &lt;div
 class="w-full md:w-auto pt-3 p-5 border border-neutral-200 dark:border-neutral-700 border rounded-md shadow-2xl"&gt;
 &lt;div class="flex items-center"&gt;
 &lt;span class="text-2xl text-neutral-800 dark:text-neutral me-2"&gt;
 &lt;span class="relative block icon"&gt;&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;svg fill="currentColor" viewBox="0 0 24 24" role="img" xmlns="http://www.w3.org/2000/svg"&gt;&lt;path d="M11.955.49A12 12 0 0 0 0 12.49a12 12 0 0 0 1.832 6.373L11.838 5.928a.187.14 0 0 1 .324 0l10.006 12.935A12 12 0 0 0 24 12.49a12 12 0 0 0-12-12 12 12 0 0 0-.045 0zm.375 6.467 4.416 16.553a12 12 0 0 0 5.137-4.213z"/&gt;&lt;/svg&gt;
&lt;/span&gt;
 &lt;/span&gt;
 &lt;div
 id="codeberg-5e831c713e04e10fda9b50cd8138e74f-full_name"
 class="m-0 font-bold text-xl text-neutral-800 decoration-primary-500 hover:underline hover:underline-offset-2 dark:text-neutral"&gt;
 head1328/kevinhorst.de
 &lt;/div&gt;
 &lt;/div&gt;

 &lt;p id="codeberg-5e831c713e04e10fda9b50cd8138e74f-description" class="m-0 mt-2 text-md text-neutral-800 dark:text-neutral"&gt;
 My personal homepage &lt;a href="https://kevinhorst.de" target="_blank" rel="noopener noreferrer"&gt;https://kevinhorst.de&lt;/a&gt;
 &lt;/p&gt;</description></item></channel></rss>