diff --git a/plugins/default-redis.yml b/plugins/default-redis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..19f1490b655ad41acc2e7c184b480166fa456f76
--- /dev/null
+++ b/plugins/default-redis.yml
@@ -0,0 +1,5 @@
+include:
+  - remote: https://git-cdn.e15r.co/gitlab/ci/wordpress/-/raw/main/plugins/templates/variables.yml
+  - remote: https://git-cdn.e15r.co/gitlab/ci/wordpress/-/raw/main/plugins/templates/cache.yml
+  - remote: https://git-cdn.e15r.co/gitlab/ci/wordpress/-/raw/main/plugins/templates/before-script-redis.yml
+  - remote: https://git-cdn.e15r.co/gitlab/ci/wordpress/-/raw/main/plugins/templates/matrix-redis.yml
diff --git a/plugins/templates/before-script-redis.yml b/plugins/templates/before-script-redis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..69f3def090187b7234734e73dd53129c1649ef26
--- /dev/null
+++ b/plugins/templates/before-script-redis.yml
@@ -0,0 +1,19 @@
+before_script:
+  # Set up WordPress tests
+  - bash bin/install-wp-tests.sh $MYSQL_DATABASE root $MYSQL_ROOT_PASSWORD mysql $WP_VERSION true
+
+  # PHPUnit
+  - |
+    if [[ $(php -v) =~ "PHP 8." ]]; then
+      composer global require "phpunit/phpunit=9.*"
+    elif [[ $(php -v) =~ "PHP 7." ]]; then
+      composer global require "phpunit/phpunit=6.1.*"
+    elif [[ $(php -v) =~ "PHP 5.6" ]]; then
+      composer global require "phpunit/phpunit=5.7.*"
+    fi
+
+  # PHPUnit requirements
+  - composer global require yoast/phpunit-polyfills
+
+  # PECL Redis module
+  - pecl install redis
diff --git a/plugins/templates/matrix-redis.yml b/plugins/templates/matrix-redis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..3cf1c9af9223e4656ce53a8f1648b85bfdd7978c
--- /dev/null
+++ b/plugins/templates/matrix-redis.yml
@@ -0,0 +1,100 @@
+PHPunit:PHP5.6:MySQL:Redis:
+  stage: test
+  image: containers.ethitter.com:443/docker/images/php:5.6
+  services:
+    - mysql:5.6
+    - redis:alpine
+  script:
+    - find . -type "f" -iname "*.php" | xargs -L "1" php -l
+    - phpunit
+
+PHPunit:PHP7.0:MySQL:Redis:
+  stage: test
+  image: containers.ethitter.com:443/docker/images/php:7.0
+  services:
+    - mysql:5.6
+    - redis:alpine
+  script:
+    - find . -type "f" -iname "*.php" | xargs -L "1" php -l
+    - phpunit
+
+PHPunit:PHP7.1:MySQL:Redis:
+  stage: test
+  image: containers.ethitter.com:443/docker/images/php:7.1
+  services:
+    - mysql:5.6
+    - redis:alpine
+  script:
+    - find . -type "f" -iname "*.php" | xargs -L "1" php -l
+    - phpunit
+
+PHPunit:PHP7.2:MySQL:Redis:
+  stage: test
+  image: containers.ethitter.com:443/docker/images/php:7.2
+  services:
+    - mysql:5.6
+    - redis:alpine
+  script:
+    - find . -type "f" -iname "*.php" | xargs -L "1" php -l
+    - phpunit
+
+PHPunit:PHP7.3:MySQL:Redis:
+  stage: test
+  image: containers.ethitter.com:443/docker/images/php:7.3
+  services:
+    - mysql:5.6
+    - redis:alpine
+  script:
+    - find . -type "f" -iname "*.php" | xargs -L "1" php -l
+    - phpunit
+
+PHPunit:PHP7.4:MySQL:Redis:
+  stage: test
+  image: containers.ethitter.com:443/docker/images/php:7.4
+  services:
+    - mysql:5.6
+    - redis:alpine
+  script:
+    - find . -type "f" -iname "*.php" | xargs -L "1" php -l
+    - phpunit
+
+PHPunit:PHP8.0:MySQL:Redis:
+  stage: test
+  image: containers.ethitter.com:443/docker/images/php:8.0
+  services:
+    - mysql:5.6
+    - redis:alpine
+  script:
+    - find . -type "f" -iname "*.php" | xargs -L "1" php -l
+    - phpunit
+
+PHPunit:PHP8.1:MySQL:Redis:
+  stage: test
+  image: containers.ethitter.com:443/docker/images/php:8.1
+  services:
+    - mysql:5.6
+    - redis:alpine
+  script:
+    - find . -type "f" -iname "*.php" | xargs -L "1" php -l
+    - phpunit
+  allow_failure: true
+
+PHPCS:
+  stage: test
+  image: containers.ethitter.com:443/docker/images/php:7.4
+  before_script:
+    - composer global require automattic/vipwpcs
+    - composer global require phpcompatibility/phpcompatibility-wp
+    - phpcs --config-set installed_paths $HOME/.composer/vendor/wp-coding-standards/wpcs,$HOME/.composer/vendor/automattic/vipwpcs,$HOME/.composer/vendor/phpcompatibility/php-compatibility,$HOME/.composer/vendor/phpcompatibility/phpcompatibility-paragonie,$HOME/.composer/vendor/phpcompatibility/phpcompatibility-wp,$HOME/.composer/vendor/sirbrillig/phpcs-variable-analysis
+    - phpcs --config-show
+  script:
+    - phpcs -n
+
+PluginSVN:
+  stage: deploy
+  image: containers.ethitter.com:443/docker/wp-org-plugin-deploy:latest
+  before_script:
+    - curl -o ./bin/deploy.sh https://git-cdn.e15r.co/open-source/wp-org-plugin-deploy/raw/master/scripts/deploy.sh
+    - chmod +x ./bin/deploy.sh
+  script: ./bin/deploy.sh
+  when: on_success