diff --git a/README.md b/README.md
index 7d864410421b311c6f35cf4001149dbfabbdbb1a..3c461686dc65e7a4d52783b0d818cae3fcd78653 100644
--- a/README.md
+++ b/README.md
@@ -45,6 +45,15 @@ The default Docker image to use. Required when executor is `docker`.
 The tags assigned to the runner,
 Defaults to an empty list.
 
+`gitlab_runner_cache_type`
+Variables to set s3 as a shared cache server. If set it requires variables listed below:
+`gitlab_runner_cache_s3_server_address`
+`gitlab_runner_cache_s3_access_key`
+`gitlab_runner_cache_s3_access_key`
+`gitlab_runner_cache_s3_bucket_name`
+`gitlab_runner_cache_s3_insecure`
+`gitlab_runner_cache_cache_shared`
+
 See the [config for more options](https://github.com/riemers/ansible-gitlab-runner/blob/master/tasks/register-runner.yml)
 
 Example Playbook
diff --git a/tasks/register-runner.yml b/tasks/register-runner.yml
index 4c4ed164cb35aa95c89450358a3b80ee2f486301..58c871ef7a9a6a68bc4242804729dd8cb29ff0c4 100644
--- a/tasks/register-runner.yml
+++ b/tasks/register-runner.yml
@@ -24,4 +24,13 @@
     --ssh-port '{{ gitlab_runner_ssh_port }}'
     --ssh-password '{{ gitlab_runner_ssh_password }}'
     --ssh-identity-file '{{ gitlab_runner_ssh_identity_file }}'
+    {% if gitlab_runner_cache_type is defined %}
+    --cache-type '{{ gitlab_runner_cache_type }}'
+    --cache-s3-server-address '{{ gitlab_runner_cache_s3_server_address }}'
+    --cache-s3-access-key '{{ gitlab_runner_cache_s3_access_key }}'
+    --cache-s3-secret-key '{{ gitlab_runner_cache_s3_access_key }}'
+    --cache-s3-bucket-name '{{ gitlab_runner_cache_s3_bucket_name }}'
+    --cache-s3-insecure '{{ gitlab_runner_cache_s3_insecure }}'
+    --cache-cache-shared '{{ gitlab_runner_cache_cache_shared }}'
+    {% endif %}
   when: configured_runners.stderr.find('\n' + gitlab_runner_description) == -1