diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 56c771dea49915831752af0f4ec7478f69e801a0..4161ed38622fb180176b191aa7505edb33fc43ce 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -263,7 +263,7 @@ create-vps:
     - *debug_information
     # Creates a VPS based on a custom CI image for which --install-kubernetes
     # has already run. See CONTRIBUTING.md#ci-pipeline-image for more info
-    - sh .gitlab/ci_scripts/create_vps.sh
+    - bash .gitlab/ci_scripts/create_vps.sh
     # Make sure .ci.env variables are not lost
     - cat .ci.env >> ${CLUSTER_DIR}/.cluster.env
   extends:
@@ -314,7 +314,7 @@ setup-openappstack:
     - ls -la .
     - ls -la ./install
     - source clusters/${CI_COMMIT_REF_SLUG}/.cluster.env
-    - sh ./install/install-openappstack.sh
+    - bash ./install/install-openappstack.sh
     # TODO: Should also be removed or made up-to-date
     # Show versions of installed apps/binaries
     # - cd ansible
@@ -432,7 +432,7 @@ single-sign-on-helm-release:
   stage: install-apps
   script:
     - *debug_information
-    - sh ./install/install-${APP}.sh
+    - bash ./install/install-${APP}.sh
   extends:
     - .ssh_setup
   interruptible: true
diff --git a/install/install-nextcloud.sh b/install/install-nextcloud.sh
index c515e9839af6e872b88bfc9ff16c29360267701c..e6aea0346665a8490e3afbb01bdafa28eda5b8ea 100755
--- a/install/install-nextcloud.sh
+++ b/install/install-nextcloud.sh
@@ -1,4 +1,6 @@
-#!/bin/bash
+#!/usr/bin/env bash
+
+set -euo pipefail
 
 # First, add some overrides for values that are only useful in CI
 kubectl apply -n oas-apps -f $( dirname "${BASH_SOURCE[0]}" )/nextcloud-values-override.yaml
diff --git a/install/install-openappstack.sh b/install/install-openappstack.sh
index 84000f331008f511962f61399876f4a76226b2d7..0b0efe56a6deb9dcff08900589bcef5854597331 100755
--- a/install/install-openappstack.sh
+++ b/install/install-openappstack.sh
@@ -1,4 +1,6 @@
-#!/bin/bash
+#!/usr/bin/env bash
+
+set -euo pipefail
 
 flux install \
   --network-policy=false \
diff --git a/install/install-rocketchat.sh b/install/install-rocketchat.sh
index 576e21582e4bf5d693e4b7cb7188a14e6c11efdb..a0364c459d12cea53eda938188c1358e0ae62e64 100755
--- a/install/install-rocketchat.sh
+++ b/install/install-rocketchat.sh
@@ -1,4 +1,6 @@
-#!/bin/bash
+#!/usr/bin/env bash
+
+set -euo pipefail
 
 # This kustomization's only purpose is to add the kustomization that is in the
 # flxu2/cluster/optional/rocketchat folder. After this kustomization is applied
diff --git a/install/install-velero.sh b/install/install-velero.sh
index 7b849b9785663a157fef850fa2fde1fc8bff3f07..3b85c1f773d7e6e127e70cc851432ffa516e5388 100755
--- a/install/install-velero.sh
+++ b/install/install-velero.sh
@@ -1,4 +1,6 @@
-#!/bin/bash
+#!/usr/bin/env bash
+
+set -euo pipefail
 
 # This kustomization's only purpose is to add the kustomization that is in the
 # flxu2/cluster/optional/velero folder. After this kustomization is applied
diff --git a/install/install-wordpress.sh b/install/install-wordpress.sh
index 40d93607b6dbe92980a0a78ba4a9f5e853f9d06b..2db41fdd637caf22844afca9d5355b5f07c9328a 100755
--- a/install/install-wordpress.sh
+++ b/install/install-wordpress.sh
@@ -1,4 +1,6 @@
-#!/bin/bash
+#!/usr/bin/env bash
+
+set -euo pipefail
 
 # This kustomization's only purpose is to add the kustomization that is in the
 # flxu2/cluster/optional/wordpress folder. After this kustomization is applied