diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c436982247be366871cdfdff5aef4fbb7679ac02..c331bd61252b295324e11a436554cac6e88603a2 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -6,13 +6,15 @@ before_script:
   - echo "deb-src http://security.debian.org/debian-security stretch/updates main contrib non-free" >> /etc/apt/sources.list
   - sort /etc/apt/sources.list | uniq > sources.list.new
   - mv sources.list.new /etc/apt/sources.list
-  - cat /etc/apt/sources.list
   - apt-get update
   - apt-get install -y dpkg-dev quilt devscripts
   - python3 -m venv venv
   - source venv/bin/activate
   - pip install wheel
   - pip install -r requirements.txt
+  - mkdir -p ~/.ssh
+  - echo $DEPLOY_KEY | base64 --decode > ~/.ssh/id_ed25519
+  - chmod go-rw ~/.ssh/id_ed25519
 
 stages:
   - build
diff --git a/packages.yml b/packages.yml
index 2c3b4d5d867d1fdfccc3258beada0895afc0ddfa..f9daad4bd59555399c3424e394f92c4534dfa9f1 100644
--- a/packages.yml
+++ b/packages.yml
@@ -1,6 +1,7 @@
 maintainer:
   name: FSMPI Admin-Team
   mail: admin@fsmpi.rwth-aachen.de
+upload_target: repo@repo.fsmpi.rwth-aachen.de:/srv/repo/incoming/
 packages:
   - name: adcli
     version: 0.8.2-1.1-fsmpi
diff --git a/scripts/build.py b/scripts/build.py
index 128fcd598e97fbe47424e932966f35fe262a7932..2b9cb4319ded47dec47a0b5d05364030d08ffef5 100755
--- a/scripts/build.py
+++ b/scripts/build.py
@@ -67,14 +67,10 @@ def build_package(repo_dir, package_dir, name,
 
         workdir = os.path.join(tempdir, pkg_dir)
 
-        print("Content of tempdir:", os.listdir(tempdir))
-        print("Content of workdir:", os.listdir(workdir))
 
         if additional_content is not None:
-            print("applying additional content")
             for content in additional_content:
                 target_dir = content["target_dir"]
-                print("applying", content, "in", target_dir)
                 os.chdir(os.path.join(workdir, target_dir))
                 if "patch_dir" in content:
                     abs_patch_dir = os.path.join(
@@ -101,7 +97,6 @@ def build_package(repo_dir, package_dir, name,
         for entry in _get_log_entries():
             run_checked(command + [entry])
 
-        print("building")
         command = ["apt-get", "build-dep", "-y", name]
         run_checked(command)
 
@@ -117,6 +112,22 @@ def build_package(repo_dir, package_dir, name,
             shutil.move(os.path.join(tempdir, filename), package_dir)
 
 
+def upload_packages(package_dir, upload_target, key_file=None):
+    ssh_args = ["ssh", "-o", "StrictHostKeyChecking=no"]
+    if key_file:
+        ssh_args.extend(["-i", key_file])
+    if not package_dir.endswith("/"):
+        package_dir += "/"
+    command = [ 
+        "rsync",
+        "--recursive",
+        "-e", " ".join(ssh_args),
+        package_dir,
+        upload_target,
+    ]
+    run_checked(command)
+
+
 def main():
     repo_dir = os.getcwd()
     config = load_config()
@@ -137,8 +148,11 @@ def main():
         os.chdir(repo_dir)
 
     import pprint
+    print("Built packages:")
     pprint.pprint(sorted(os.listdir(package_dir)))
 
+    upload_packages(package_dir, config["upload_target"], key_file="~/.ssh/id_ed25519")
+
 if __name__ == "__main__":
     main()