diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 0364e287edca185bb8ec2befadc09cba4bf84b7c_LmdpdGxhYi1jaS55bWw=..de0aad79dc8b3efb3580cb5662d73c2ba272f098_LmdpdGxhYi1jaS55bWw= 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -23,7 +23,7 @@
 
 variables:
   BUILDER_IMAGE_REGISTRY: "dev.gitlab.org:5005/cookbooks/gitlab-omnibus-builder"
-  BUILDER_IMAGE_REVISION: "0.0.19"
+  BUILDER_IMAGE_REVISION: "0.0.21"
   ASSET_SYNC_EXISTING_REMOTE_FILES: "keep"
   ASSET_SYNC_GZIP_COMPRESSION: "true"
 
diff --git a/.ruby-version b/.ruby-version
index 0364e287edca185bb8ec2befadc09cba4bf84b7c_LnJ1YnktdmVyc2lvbg==..de0aad79dc8b3efb3580cb5662d73c2ba272f098_LnJ1YnktdmVyc2lvbg== 100644
--- a/.ruby-version
+++ b/.ruby-version
@@ -1,1 +1,1 @@
-ruby-2.3.7
+2.4.4
diff --git a/Gemfile b/Gemfile
index 0364e287edca185bb8ec2befadc09cba4bf84b7c_R2VtZmlsZQ==..de0aad79dc8b3efb3580cb5662d73c2ba272f098_R2VtZmlsZQ== 100644
--- a/Gemfile
+++ b/Gemfile
@@ -2,7 +2,7 @@
 
 require_relative "lib/gitlab/version"
 
-omnibus_gem_version = Gitlab::Version.new('omnibus', "gitlab-omnibus-v5.6.10")
+omnibus_gem_version = Gitlab::Version.new('omnibus', "gitlab-omnibus-v5.6.12")
 
 # Note that omnibus is from a fork with additional gitlab changes.  You can
 # check what they are with the following comparison link:
diff --git a/Gemfile.lock b/Gemfile.lock
index 0364e287edca185bb8ec2befadc09cba4bf84b7c_R2VtZmlsZS5sb2Nr..de0aad79dc8b3efb3580cb5662d73c2ba272f098_R2VtZmlsZS5sb2Nr 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,5 +1,5 @@
 GIT
   remote: https://dev.gitlab.org/gitlab/omnibus.git
-  revision: 2ab28fbfc86a76e3f0d80411a86e6e10dcb79655
-  branch: gitlab-omnibus-v5.6.10
+  revision: b6d67e8db5c594d4e2b3970d8536141e8afee51d
+  branch: gitlab-omnibus-v5.6.12
   specs:
@@ -5,5 +5,5 @@
   specs:
-    omnibus (5.6.10)
+    omnibus (5.6.12)
       aws-sdk (~> 2)
       chef-sugar (~> 3.3)
       cleanroom (~> 1.0)
@@ -141,7 +141,7 @@
       rake
       timecop (>= 0.1.0)
     libyajl2 (1.2.0)
-    license_scout (1.0.0)
+    license_scout (1.0.10)
       ffi-yajl (~> 2.2)
       mixlib-shellout (~> 2.2)
       toml-rb (~> 1.0)
diff --git a/config/patches/nginx/gcc7.patch b/config/patches/nginx/gcc7.patch
new file mode 100644
index 0000000000000000000000000000000000000000..de0aad79dc8b3efb3580cb5662d73c2ba272f098_Y29uZmlnL3BhdGNoZXMvbmdpbngvZ2NjNy5wYXRjaA==
--- /dev/null
+++ b/config/patches/nginx/gcc7.patch
@@ -0,0 +1,55 @@
+diff --git a/src/core/ngx_murmurhash.c b/src/core/ngx_murmurhash.c
+index c31e0e0..5ade658 100644
+--- a/src/core/ngx_murmurhash.c
++++ b/src/core/ngx_murmurhash.c
+@@ -35,8 +35,10 @@ ngx_murmur_hash2(u_char *data, size_t len)
+     switch (len) {
+     case 3:
+         h ^= data[2] << 16;
++        /* fall through */
+     case 2:
+         h ^= data[1] << 8;
++        /* fall through */
+     case 1:
+         h ^= data[0];
+         h *= 0x5bd1e995;
+diff --git a/src/http/ngx_http_parse.c b/src/http/ngx_http_parse.c
+index 9f99473..c65f015 100644
+--- a/src/http/ngx_http_parse.c
++++ b/src/http/ngx_http_parse.c
+@@ -1390,6 +1390,7 @@ ngx_http_parse_complex_uri(ngx_http_request_t *r, ngx_uint_t merge_slashes)
+                 goto done;
+             case '+':
+                 r->plus_in_uri = 1;
++                /* fall through */
+             default:
+                 state = sw_usual;
+                 *u++ = ch;
+@@ -1431,6 +1432,7 @@ ngx_http_parse_complex_uri(ngx_http_request_t *r, ngx_uint_t merge_slashes)
+                 goto done;
+             case '+':
+                 r->plus_in_uri = 1;
++                /* fall through */
+             default:
+                 state = sw_usual;
+                 *u++ = ch;
+@@ -1478,6 +1480,7 @@ ngx_http_parse_complex_uri(ngx_http_request_t *r, ngx_uint_t merge_slashes)
+                 goto done;
+             case '+':
+                 r->plus_in_uri = 1;
++                /* fall through */
+             default:
+                 state = sw_usual;
+                 *u++ = ch;
+diff --git a/src/os/unix/ngx_process.c b/src/os/unix/ngx_process.c
+index 2d37e21..016c167 100644
+--- a/src/os/unix/ngx_process.c
++++ b/src/os/unix/ngx_process.c
+@@ -405,6 +405,7 @@ ngx_signal_handler(int signo)
+                 break;
+             }
+             ngx_debug_quit = 1;
++            /* fall through */
+         case ngx_signal_value(NGX_SHUTDOWN_SIGNAL):
+             ngx_quit = 1;
+             action = ", shutting down";
diff --git a/config/software/nginx.rb b/config/software/nginx.rb
index 0364e287edca185bb8ec2befadc09cba4bf84b7c_Y29uZmlnL3NvZnR3YXJlL25naW54LnJi..de0aad79dc8b3efb3580cb5662d73c2ba272f098_Y29uZmlnL3NvZnR3YXJlL25naW54LnJi 100644
--- a/config/software/nginx.rb
+++ b/config/software/nginx.rb
@@ -37,6 +37,9 @@
 relative_path "nginx-#{version}"
 
 build do
+  # Patch nginx to work with gcc 7.
+  # For details: https://trac.nginx.org/nginx/ticket/1259
+  patch source: 'gcc7.patch'
   command ['./configure',
            "--prefix=#{install_dir}/embedded",
            '--with-http_ssl_module',