summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-01-08 21:08:08 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-01-08 21:08:08 +0000
commite0b84f4ba4b44c8ecf00be97843c40df2550b74c (patch)
tree7cecae4276358dd46d7fa15f84068f7b4c626089 /doc
parent73391dcc368ef846c2960c1d0ef5e64ca78e1bee (diff)
downloadgitlab-ce-e0b84f4ba4b44c8ecf00be97843c40df2550b74c.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'doc')
-rw-r--r--doc/administration/gitaly/praefect.md89
-rw-r--r--doc/administration/packages/container_registry.md2
-rw-r--r--doc/api/graphql/reference/gitlab_schema.graphql70
-rw-r--r--doc/api/graphql/reference/gitlab_schema.json204
-rw-r--r--doc/api/graphql/reference/index.md18
-rw-r--r--doc/api/projects.md10
-rw-r--r--doc/ci/docker/using_docker_images.md26
-rw-r--r--doc/ci/examples/test-and-deploy-ruby-application-to-heroku.md6
-rw-r--r--doc/ci/yaml/README.md8
-rw-r--r--doc/development/performance.md2
-rw-r--r--doc/user/application_security/dependency_scanning/index.md2
-rw-r--r--doc/user/project/pages/getting_started_part_four.md18
-rw-r--r--doc/user/project/pages/introduction.md4
13 files changed, 391 insertions, 68 deletions
diff --git a/doc/administration/gitaly/praefect.md b/doc/administration/gitaly/praefect.md
index 597be6cc97e..72c3f996841 100644
--- a/doc/administration/gitaly/praefect.md
+++ b/doc/administration/gitaly/praefect.md
@@ -25,15 +25,22 @@ The most common architecture for Praefect is simplified in the diagram below:
```mermaid
graph TB
GitLab --> Praefect;
- Praefect --> Gitaly-1;
- Praefect --> Gitaly-2;
- Praefect --> Gitaly-3;
+ Praefect --- PostgreSQL;
+ Praefect --> Gitaly1;
+ Praefect --> Gitaly2;
+ Praefect --> Gitaly3;
```
Where `GitLab` is the collection of clients that can request Git operations.
The Praefect node has three storage nodes attached. Praefect itself doesn't
store data, but connects to three Gitaly nodes, `Gitaly-1`, `Gitaly-2`, and `Gitaly-3`.
+In order to keep track of replication state, Praefect relies on a
+PostgreSQL database. This database is a single point of failure so you
+should use a highly available PostgreSQL server for this. GitLab
+itself needs a HA PostgreSQL server too, so you could optionally co-locate the Praefect
+SQL database on the PostgreSQL server you use for the rest of GitLab.
+
Praefect may be enabled on its own node or can be run on the GitLab server.
In the example below we will use a separate server, but the optimal configuration
for Praefect is still being determined.
@@ -62,6 +69,53 @@ We need to manage the following secrets and make them match across hosts:
`PRAEFECT_EXTERNAL_TOKEN` because Gitaly clients must not be able to
access internal nodes of the Praefect cluster directly; that could
lead to data loss.
+1. `PRAEFECT_SQL_PASSWORD`: this password is used by Praefect to connect to
+ PostgreSQL.
+
+#### Network addresses
+
+1. `POSTGRESQL_SERVER`: the host name or IP address of your PostgreSQL server
+
+#### PostgreSQL
+
+To set up a Praefect cluster you need a highly available PostgreSQL
+server. You need PostgreSQL 9.6 or newer. Praefect needs to have a SQL
+user with the right to create databases.
+
+In the instructions below we assume you have administrative access to
+your PostgreSQL server via `psql`. Depending on your environment, you
+may also be able to do this via the web interface of your cloud
+platform, or via your configuration management system, etc.
+
+Below we assume that you have administrative access as the `postgres`
+user. First open a `psql` session as the `postgres` user:
+
+```shell
+psql -h POSTGRESQL_SERVER -U postgres -d template1
+```
+
+Once you are connected, run the following command. Replace
+`PRAEFECT_SQL_PASSWORD` with the actual (random) password you
+generated for the `praefect` SQL user:
+
+```sql
+CREATE ROLE praefect WITH LOGIN CREATEDB PASSWORD 'PRAEFECT_SQL_PASSWORD';
+\q # exit psql
+```
+
+Now connect as the `praefect` user to create the database. This has
+the side effect of verifying that you have access:
+
+```shell
+psql -h POSTGRESQL_SERVER -U praefect -d template1
+```
+
+Once you have connected as the `praefect` user, run:
+
+```sql
+CREATE DATABASE praefect_production WITH ENCODING=UTF8;
+\q # quit psql
+```
#### Praefect
@@ -118,10 +172,39 @@ praefect['virtual_storages'] = {
}
}
}
+
+praefect['database_host'] = 'POSTGRESQL_SERVER'
+praefect['database_port'] = 5432
+praefect['database_user'] = 'praefect'
+praefect['database_password'] = 'PRAEFECT_SQL_PASSWORD'
+praefect['database_dbname'] = 'praefect_production'
+
+# Uncomment the line below if you do not want to use an encrypted
+# connection to PostgreSQL
+# praefect['database_sslmode'] = 'disable'
+
+# Uncomment and modify these lines if you are using a TLS client
+# certificate to connect to PostgreSQL
+# praefect['database_sslcert'] = '/path/to/client-cert'
+# praefect['database_sslkey'] = '/path/to/client-key'
+
+# Uncomment and modify this line if your PostgreSQL server uses a custom
+# CA
+# praefect['database_sslrootcert'] = '/path/to/rootcert'
```
Save the file and [reconfigure Praefect](../restart_gitlab.md#omnibus-gitlab-reconfigure).
+After you reconfigure, verify that Praefect can reach PostgreSQL:
+
+```shell
+sudo -u git /opt/gitlab/embedded/bin/praefect -config /var/opt/gitlab/praefect/config.toml sql-ping
+```
+
+If the check fails, make sure you have followed the steps correctly. If you edit `/etc/gitlab/gitlab.rb`,
+remember to run `sudo gitlab-ctl reconfigure` again before trying the
+`sql-ping` command.
+
#### Gitaly
Next we will configure each Gitaly server assigned to Praefect. Configuration for these
diff --git a/doc/administration/packages/container_registry.md b/doc/administration/packages/container_registry.md
index 0c6caed4e55..e573699e856 100644
--- a/doc/administration/packages/container_registry.md
+++ b/doc/administration/packages/container_registry.md
@@ -631,7 +631,7 @@ mounting the docker-daemon and setting `privileged = false` in the Runner's
```toml
[runners.docker]
- image = "ruby:2.1"
+ image = "ruby:2.6"
privileged = false
volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
```
diff --git a/doc/api/graphql/reference/gitlab_schema.graphql b/doc/api/graphql/reference/gitlab_schema.graphql
index 5c6dd93a676..c04071faf9c 100644
--- a/doc/api/graphql/reference/gitlab_schema.graphql
+++ b/doc/api/graphql/reference/gitlab_schema.graphql
@@ -529,9 +529,9 @@ type CreateSnippetPayload {
snippet: Snippet
}
-type Design implements Noteable {
+type Design implements DesignFields & Noteable {
"""
- Diff refs of the design
+ The diff refs for this design
"""
diffRefs: DiffRefs!
@@ -561,33 +561,32 @@ type Design implements Noteable {
): DiscussionConnection!
"""
- Type of change made to the design at the version specified by the `atVersion`
- argument if supplied. Defaults to the latest version
+ How this design was changed in the current version
"""
event: DesignVersionEvent!
"""
- Filename of the design file
+ The filename of the design
"""
filename: String!
"""
- Full path of the design file
+ The full path to the design file
"""
fullPath: String!
"""
- ID of the design
+ The ID of this design
"""
id: ID!
"""
- Image of the design
+ The URL of the image
"""
image: String!
"""
- Issue associated with the design
+ The issue the design belongs to
"""
issue: Issue!
@@ -617,17 +616,17 @@ type Design implements Noteable {
): NoteConnection!
"""
- Total count of user-created notes for the design
+ The total count of user-created notes for this design
"""
notesCount: Int!
"""
- Project associated with the design
+ The project the design belongs to
"""
project: Project!
"""
- All versions related to the design, ordered newest first
+ All versions related to this design ordered newest first
"""
versions(
"""
@@ -765,6 +764,53 @@ type DesignEdge {
node: Design
}
+interface DesignFields {
+ """
+ The diff refs for this design
+ """
+ diffRefs: DiffRefs!
+
+ """
+ How this design was changed in the current version
+ """
+ event: DesignVersionEvent!
+
+ """
+ The filename of the design
+ """
+ filename: String!
+
+ """
+ The full path to the design file
+ """
+ fullPath: String!
+
+ """
+ The ID of this design
+ """
+ id: ID!
+
+ """
+ The URL of the image
+ """
+ image: String!
+
+ """
+ The issue the design belongs to
+ """
+ issue: Issue!
+
+ """
+ The total count of user-created notes for this design
+ """
+ notesCount: Int!
+
+ """
+ The project the design belongs to
+ """
+ project: Project!
+}
+
"""
Autogenerated input type of DesignManagementDelete
"""
diff --git a/doc/api/graphql/reference/gitlab_schema.json b/doc/api/graphql/reference/gitlab_schema.json
index 1357cab54fe..8730cccf1ed 100644
--- a/doc/api/graphql/reference/gitlab_schema.json
+++ b/doc/api/graphql/reference/gitlab_schema.json
@@ -10350,7 +10350,7 @@
"fields": [
{
"name": "diffRefs",
- "description": "Diff refs of the design",
+ "description": "The diff refs for this design",
"args": [
],
@@ -10425,7 +10425,7 @@
},
{
"name": "event",
- "description": "Type of change made to the design at the version specified by the `atVersion` argument if supplied. Defaults to the latest version",
+ "description": "How this design was changed in the current version",
"args": [
],
@@ -10443,7 +10443,7 @@
},
{
"name": "filename",
- "description": "Filename of the design file",
+ "description": "The filename of the design",
"args": [
],
@@ -10461,7 +10461,7 @@
},
{
"name": "fullPath",
- "description": "Full path of the design file",
+ "description": "The full path to the design file",
"args": [
],
@@ -10479,7 +10479,7 @@
},
{
"name": "id",
- "description": "ID of the design",
+ "description": "The ID of this design",
"args": [
],
@@ -10497,7 +10497,7 @@
},
{
"name": "image",
- "description": "Image of the design",
+ "description": "The URL of the image",
"args": [
],
@@ -10515,7 +10515,7 @@
},
{
"name": "issue",
- "description": "Issue associated with the design",
+ "description": "The issue the design belongs to",
"args": [
],
@@ -10590,7 +10590,7 @@
},
{
"name": "notesCount",
- "description": "Total count of user-created notes for the design",
+ "description": "The total count of user-created notes for this design",
"args": [
],
@@ -10608,7 +10608,7 @@
},
{
"name": "project",
- "description": "Project associated with the design",
+ "description": "The project the design belongs to",
"args": [
],
@@ -10626,7 +10626,7 @@
},
{
"name": "versions",
- "description": "All versions related to the design, ordered newest first",
+ "description": "All versions related to this design ordered newest first",
"args": [
{
"name": "after",
@@ -10688,12 +10688,196 @@
"kind": "INTERFACE",
"name": "Noteable",
"ofType": null
+ },
+ {
+ "kind": "INTERFACE",
+ "name": "DesignFields",
+ "ofType": null
}
],
"enumValues": null,
"possibleTypes": null
},
{
+ "kind": "INTERFACE",
+ "name": "DesignFields",
+ "description": null,
+ "fields": [
+ {
+ "name": "diffRefs",
+ "description": "The diff refs for this design",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "DiffRefs",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "event",
+ "description": "How this design was changed in the current version",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "ENUM",
+ "name": "DesignVersionEvent",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "filename",
+ "description": "The filename of the design",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "fullPath",
+ "description": "The full path to the design file",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "id",
+ "description": "The ID of this design",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "ID",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "image",
+ "description": "The URL of the image",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "String",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "issue",
+ "description": "The issue the design belongs to",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Issue",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "notesCount",
+ "description": "The total count of user-created notes for this design",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "SCALAR",
+ "name": "Int",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ },
+ {
+ "name": "project",
+ "description": "The project the design belongs to",
+ "args": [
+
+ ],
+ "type": {
+ "kind": "NON_NULL",
+ "name": null,
+ "ofType": {
+ "kind": "OBJECT",
+ "name": "Project",
+ "ofType": null
+ }
+ },
+ "isDeprecated": false,
+ "deprecationReason": null
+ }
+ ],
+ "inputFields": null,
+ "interfaces": null,
+ "enumValues": null,
+ "possibleTypes": [
+ {
+ "kind": "OBJECT",
+ "name": "Design",
+ "ofType": null
+ }
+ ]
+ },
+ {
"kind": "ENUM",
"name": "DesignVersionEvent",
"description": "Mutation event of a Design within a Version",
diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md
index 8ca17d4107d..086c80415ad 100644
--- a/doc/api/graphql/reference/index.md
+++ b/doc/api/graphql/reference/index.md
@@ -104,15 +104,15 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph
| Name | Type | Description |
| --- | ---- | ---------- |
-| `id` | ID! | ID of the design |
-| `project` | Project! | Project associated with the design |
-| `issue` | Issue! | Issue associated with the design |
-| `notesCount` | Int! | Total count of user-created notes for the design |
-| `filename` | String! | Filename of the design file |
-| `fullPath` | String! | Full path of the design file |
-| `event` | DesignVersionEvent! | Type of change made to the design at the version specified by the `atVersion` argument if supplied. Defaults to the latest version |
-| `image` | String! | Image of the design |
-| `diffRefs` | DiffRefs! | Diff refs of the design |
+| `id` | ID! | The ID of this design |
+| `project` | Project! | The project the design belongs to |
+| `issue` | Issue! | The issue the design belongs to |
+| `filename` | String! | The filename of the design |
+| `fullPath` | String! | The full path to the design file |
+| `image` | String! | The URL of the image |
+| `diffRefs` | DiffRefs! | The diff refs for this design |
+| `event` | DesignVersionEvent! | How this design was changed in the current version |
+| `notesCount` | Int! | The total count of user-created notes for this design |
### DesignCollection
diff --git a/doc/api/projects.md b/doc/api/projects.md
index 33308ff8905..a856c01eb00 100644
--- a/doc/api/projects.md
+++ b/doc/api/projects.md
@@ -761,6 +761,14 @@ GET /projects/:id
"snippets_enabled": false,
"resolve_outdated_diff_discussions": false,
"container_registry_enabled": false,
+ "container_expiration_policy": {
+ "cadence": "7d",
+ "enabled": false,
+ "keep_n": null,
+ "older_than": null,
+ "name_regex": null,
+ "next_run_at": "2020-01-07T21:42:58.658Z"
+ },
"created_at": "2013-09-30T13:46:02Z",
"last_activity_at": "2013-09-30T13:46:02Z",
"creator_id": 3,
@@ -986,6 +994,7 @@ POST /projects
| `snippets_access_level` | string | no | One of `disabled`, `private` or `enabled` |
| `resolve_outdated_diff_discussions` | boolean | no | Automatically resolve merge request diffs discussions on lines changed with a push |
| `container_registry_enabled` | boolean | no | Enable container registry for this project |
+| `container_expiration_policy_attributes` | hash | no | Update the container expiration policy for this project. Accepts: `cadence` (string), `keep_n` (string), `older_than` (string), `name_regex` (string), `enabled` (boolean) |
| `shared_runners_enabled` | boolean | no | Enable shared runners for this project |
| `visibility` | string | no | See [project visibility level](#project-visibility-level) |
| `import_url` | string | no | URL to import repository from |
@@ -1115,6 +1124,7 @@ PUT /projects/:id
| `snippets_access_level` | string | no | One of `disabled`, `private` or `enabled` |
| `resolve_outdated_diff_discussions` | boolean | no | Automatically resolve merge request diffs discussions on lines changed with a push |
| `container_registry_enabled` | boolean | no | Enable container registry for this project |
+| `container_expiration_policy_attributes` | hash | no | Update the container expiration policy for this project. Accepts: `cadence` (string), `keep_n` (string), `older_than` (string), `name_regex` (string), `enabled` (boolean) |
| `shared_runners_enabled` | boolean | no | Enable shared runners for this project |
| `visibility` | string | no | See [project visibility level](#project-visibility-level) |
| `import_url` | string | no | URL to import repository from |
diff --git a/doc/ci/docker/using_docker_images.md b/doc/ci/docker/using_docker_images.md
index 2d1abed0dc5..8c6069bd939 100644
--- a/doc/ci/docker/using_docker_images.md
+++ b/doc/ci/docker/using_docker_images.md
@@ -32,14 +32,14 @@ A one-line example can be seen below:
sudo gitlab-runner register \
--url "https://gitlab.example.com/" \
--registration-token "PROJECT_REGISTRATION_TOKEN" \
- --description "docker-ruby-2.1" \
+ --description "docker-ruby:2.6" \
--executor "docker" \
- --docker-image ruby:2.1 \
+ --docker-image ruby:2.6 \
--docker-services postgres:latest \
--docker-services mysql:latest
```
-The registered runner will use the `ruby:2.1` Docker image and will run two
+The registered runner will use the `ruby:2.6` Docker image and will run two
services, `postgres:latest` and `mysql:latest`, both of which will be
accessible during the build process.
@@ -194,7 +194,7 @@ services that you want to use during build time:
```yaml
default:
- image: ruby:2.2
+ image: ruby:2.6
services:
- postgres:9.3
@@ -214,15 +214,15 @@ default:
before_script:
- bundle install
-test:2.1:
- image: ruby:2.1
+test:2.6:
+ image: ruby:2.6
services:
- postgres:9.3
script:
- bundle exec rake spec
-test:2.2:
- image: ruby:2.2
+test:2.7:
+ image: ruby:2.7
services:
- postgres:9.4
script:
@@ -235,7 +235,7 @@ for `image` and `services`:
```yaml
default:
image:
- name: ruby:2.2
+ name: ruby:2.6
entrypoint: ["/bin/bash"]
services:
@@ -277,7 +277,7 @@ services:
command: ["postgres"]
image:
- name: ruby:2.2
+ name: ruby:2.6
entrypoint: ["/bin/bash"]
before_script:
@@ -773,7 +773,7 @@ time.
1. Create any service container: `mysql`, `postgresql`, `mongodb`, `redis`.
1. Create cache container to store all volumes as defined in `config.toml` and
- `Dockerfile` of build image (`ruby:2.1` as in above example).
+ `Dockerfile` of build image (`ruby:2.6` as in above example).
1. Create build container and link any service container to build container.
1. Start build container and send job script to the container.
1. Run job script.
@@ -818,11 +818,11 @@ Finally, create a build container by executing the `build_script` file we
created earlier:
```sh
-docker run --name build -i --link=service-mysql:mysql --link=service-postgres:postgres ruby:2.1 /bin/bash < build_script
+docker run --name build -i --link=service-mysql:mysql --link=service-postgres:postgres ruby:2.6 /bin/bash < build_script
```
The above command will create a container named `build` that is spawned from
-the `ruby:2.1` image and has two services linked to it. The `build_script` is
+the `ruby:2.6` image and has two services linked to it. The `build_script` is
piped using STDIN to the bash interpreter which in turn executes the
`build_script` in the `build` container.
diff --git a/doc/ci/examples/test-and-deploy-ruby-application-to-heroku.md b/doc/ci/examples/test-and-deploy-ruby-application-to-heroku.md
index 9a4fbfcce6d..66246a0fda2 100644
--- a/doc/ci/examples/test-and-deploy-ruby-application-to-heroku.md
+++ b/doc/ci/examples/test-and-deploy-ruby-application-to-heroku.md
@@ -71,12 +71,12 @@ gitlab-runner register \
--non-interactive \
--url "https://gitlab.com/" \
--registration-token "PROJECT_REGISTRATION_TOKEN" \
- --description "ruby-2.2" \
+ --description "ruby:2.6" \
--executor "docker" \
- --docker-image ruby:2.2 \
+ --docker-image ruby:2.6 \
--docker-postgres latest
```
-With the command above, you create a Runner that uses the [ruby:2.2](https://hub.docker.com/_/ruby) image and uses a [postgres](https://hub.docker.com/_/postgres) database.
+With the command above, you create a Runner that uses the [ruby:2.6](https://hub.docker.com/_/ruby) image and uses a [postgres](https://hub.docker.com/_/postgres) database.
To access the PostgreSQL database, connect to `host: postgres` as user `postgres` with no password.
diff --git a/doc/ci/yaml/README.md b/doc/ci/yaml/README.md
index 3fc9f75808f..1d735f4e221 100644
--- a/doc/ci/yaml/README.md
+++ b/doc/ci/yaml/README.md
@@ -3645,7 +3645,7 @@ having their own custom `script` defined:
```yaml
.job_template: &job_definition # Hidden key that defines an anchor named 'job_definition'
- image: ruby:2.1
+ image: ruby:2.6
services:
- postgres
- redis
@@ -3667,13 +3667,13 @@ given hash into the current one", and `*` includes the named anchor
```yaml
.job_template:
- image: ruby:2.1
+ image: ruby:2.6
services:
- postgres
- redis
test1:
- image: ruby:2.1
+ image: ruby:2.6
services:
- postgres
- redis
@@ -3681,7 +3681,7 @@ test1:
- test1 project
test2:
- image: ruby:2.1
+ image: ruby:2.6
services:
- postgres
- redis
diff --git a/doc/development/performance.md b/doc/development/performance.md
index 786b590ec70..94285efdf1e 100644
--- a/doc/development/performance.md
+++ b/doc/development/performance.md
@@ -382,7 +382,7 @@ end
## String Freezing
In recent Ruby versions calling `freeze` on a String leads to it being allocated
-only once and re-used. For example, on Ruby 2.3 this will only allocate the
+only once and re-used. For example, on Ruby 2.3 or later this will only allocate the
"foo" String once:
```ruby
diff --git a/doc/user/application_security/dependency_scanning/index.md b/doc/user/application_security/dependency_scanning/index.md
index 01feaaac423..59f241db7de 100644
--- a/doc/user/application_security/dependency_scanning/index.md
+++ b/doc/user/application_security/dependency_scanning/index.md
@@ -146,7 +146,7 @@ using environment variables.
| `PIP_INDEX_URL` | Base URL of Python Package Index (default `https://pypi.org/simple`). |
| `PIP_EXTRA_INDEX_URL` | Array of [extra URLs](https://pip.pypa.io/en/stable/reference/pip_install/#cmdoption-extra-index-url) of package indexes to use in addition to `PIP_INDEX_URL`. Comma separated. |
| `PIP_REQUIREMENTS_FILE` | Pip requirements file to be scanned. |
-| `MAVEN_CLI_OPTS` | List of command line arguments that will be passed to the maven analyzer during the project's build phase (see example for [using private repos](#using-private-maven-repos)). |
+| `MAVEN_CLI_OPTS` | List of command line arguments that will be passed to `maven` by the analyzer. The default is `"-DskipTests --batch-mode"`. See an example for [using private repos](#using-private-maven-repos). |
| `BUNDLER_AUDIT_UPDATE_DISABLED` | Disable automatic updates for the `bundler-audit` analyzer (default: `"false"`). Useful if you're running Dependency Scanning in an offline, air-gapped environment.|
### Using private Maven repos
diff --git a/doc/user/project/pages/getting_started_part_four.md b/doc/user/project/pages/getting_started_part_four.md
index 27bd9da8d18..263b20ea224 100644
--- a/doc/user/project/pages/getting_started_part_four.md
+++ b/doc/user/project/pages/getting_started_part_four.md
@@ -1,5 +1,5 @@
---
-last_updated: 2019-06-04
+last_updated: 2020-01-06
type: reference, howto
---
@@ -158,7 +158,7 @@ first thing GitLab Runner will look for in your `.gitlab-ci.yml` is a
your container to run that script:
```yaml
-image: ruby:2.3
+image: ruby:2.7
pages:
script:
@@ -170,9 +170,9 @@ pages:
```
In this case, you're telling the Runner to pull this image, which
-contains Ruby 2.3 as part of its file system. When you don't specify
+contains Ruby 2.7 as part of its file system. When you don't specify
this image in your configuration, the Runner will use a default
-image, which is Ruby 2.1.
+image, which is Ruby 2.6.
If your SSG needs [NodeJS](https://nodejs.org/) to build, you'll
need to specify which image you want to use, and this image should
@@ -198,7 +198,7 @@ To do that, we need to add another line to our CI, telling the Runner
to only perform that _job_ called `pages` on the `master` branch `only`:
```yaml
-image: ruby:2.3
+image: ruby:2.6
pages:
script:
@@ -221,7 +221,7 @@ and deploy. To specify which stage your _job_ is running,
simply add another line to your CI:
```yaml
-image: ruby:2.3
+image: ruby:2.6
pages:
stage: deploy
@@ -244,7 +244,7 @@ let's add another task (_job_) to our CI, telling it to
test every push to other branches, `except` the `master` branch:
```yaml
-image: ruby:2.3
+image: ruby:2.6
pages:
stage: deploy
@@ -294,7 +294,7 @@ every single _job_. In our example, notice that we run
We don't need to repeat it:
```yaml
-image: ruby:2.3
+image: ruby:2.6
before_script:
- bundle install
@@ -329,7 +329,7 @@ cache Jekyll dependencies in a `vendor` directory
when we run `bundle install`:
```yaml
-image: ruby:2.3
+image: ruby:2.6
cache:
paths:
diff --git a/doc/user/project/pages/introduction.md b/doc/user/project/pages/introduction.md
index 01e1909f6d6..37b5e77c062 100644
--- a/doc/user/project/pages/introduction.md
+++ b/doc/user/project/pages/introduction.md
@@ -1,6 +1,6 @@
---
type: reference
-last_updated: 2018-06-04
+last_updated: 2020-01-06
---
# Exploring GitLab Pages
@@ -156,7 +156,7 @@ Below is a copy of `.gitlab-ci.yml` where the most significant line is the last
one, specifying to execute everything in the `pages` branch:
```
-image: ruby:2.1
+image: ruby:2.6
pages:
script: