debian-mirror-gitlab/doc/development/testing_guide/review_apps.md

202 lines
9.5 KiB
Markdown
Raw Normal View History

2019-02-15 15:39:39 +05:30
# Review Apps
2018-12-05 23:21:45 +05:30
2019-02-15 15:39:39 +05:30
Review Apps are automatically deployed by each pipeline, both in
2018-12-13 13:39:08 +05:30
[CE](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/22010) and
[EE](https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/6665).
2018-12-05 23:21:45 +05:30
## How does it work?
2019-07-31 22:56:46 +05:30
### CI/CD architecture diagram
2019-03-02 22:35:43 +05:30
![Review Apps CI/CD architecture](img/review_apps_cicd_architecture.png)
<details>
<summary>Show mermaid source</summary>
<pre>
graph TD
2019-07-31 22:56:46 +05:30
build-qa-image -.->|once the `prepare` stage is done| gitlab:assets:compile
review-build-cng -->|triggers a CNG-mirror pipeline and wait for it to be done| CNG-mirror
review-build-cng -.->|once the `test` stage is done| review-deploy
review-deploy -.->|once the `review` stage is done| review-qa-smoke
subgraph 1. gitlab-ce/ee `prepare` stage
build-qa-image
2019-03-02 22:35:43 +05:30
end
2019-07-31 22:56:46 +05:30
subgraph 2. gitlab-ce/ee `test` stage
gitlab:assets:compile -->|plays dependent job once done| review-build-cng
2019-03-02 22:35:43 +05:30
end
2019-07-31 22:56:46 +05:30
subgraph 3. gitlab-ce/ee `review` stage
review-deploy["review-deploy<br /><br />Helm deploys the Review App using the Cloud<br/>Native images built by the CNG-mirror pipeline.<br /><br />Cloud Native images are deployed to the `review-apps-ce` or `review-apps-ee`<br />Kubernetes (GKE) cluster, in the GCP `gitlab-review-apps` project."]
end
subgraph 4. gitlab-ce/ee `qa` stage
review-qa-smoke[review-qa-smoke<br /><br />gitlab-qa runs the smoke suite against the Review App.]
end
subgraph CNG-mirror pipeline
CNG-mirror>Cloud Native images are built];
2019-03-02 22:35:43 +05:30
end
</pre>
</details>
### Detailed explanation
2019-02-15 15:39:39 +05:30
1. On every [pipeline][gitlab-pipeline] during the `test` stage, the
2019-07-31 22:56:46 +05:30
[`gitlab:assets:compile`][gitlab:assets:compile] job is automatically started.
- Once it's done, it starts the [`review-build-cng`][review-build-cng]
manual job since the [`CNG-mirror`][cng-mirror] pipeline triggered in the
following step depends on it.
1. The [`review-build-cng`][review-build-cng] job [triggers a pipeline][cng-mirror-pipeline]
in the [`CNG-mirror`][cng-mirror] project.
- The [`CNG-mirror`][cng-mirror-pipeline] pipeline creates the Docker images of
each component (e.g. `gitlab-rails-ee`, `gitlab-shell`, `gitaly` etc.)
based on the commit from the [GitLab pipeline][gitlab-pipeline] and stores
them in its [registry][cng-mirror-registry].
- We use the [`CNG-mirror`][cng-mirror] project so that the `CNG`, (**C**loud
**N**ative **G**itLab), project's registry is not overloaded with a
lot of transient Docker images.
- Note that the official CNG images are built by the `cloud-native-image`
job, which runs only for tags, and triggers itself a [`CNG`][cng] pipeline.
1. Once the `test` stage is done, the [`review-deploy`][review-deploy] job
deploys the Review App using [the official GitLab Helm chart][helm-chart] to
the [`review-apps-ce`][review-apps-ce] / [`review-apps-ee`][review-apps-ee]
Kubernetes cluster on GCP.
- The actual scripts used to deploy the Review App can be found at
[`scripts/review_apps/review-apps.sh`][review-apps.sh].
- These scripts are basically
[our official Auto DevOps scripts][Auto-DevOps.gitlab-ci.yml] where the
default CNG images are overridden with the images built and stored in the
[`CNG-mirror` project's registry][cng-mirror-registry].
- Since we're using [the official GitLab Helm chart][helm-chart], this means
you get a dedicated environment for your branch that's very close to what
it would look in production.
2019-03-02 22:35:43 +05:30
1. Once the [`review-deploy`][review-deploy] job succeeds, you should be able to
2019-07-31 22:56:46 +05:30
use your Review App thanks to the direct link to it from the MR widget. To log
into the Review App, see "Log into my Review App?" below.
2018-12-05 23:21:45 +05:30
**Additional notes:**
2019-02-15 15:39:39 +05:30
- The Kubernetes cluster is connected to the `gitlab-{ce,ee}` projects using
[GitLab's Kubernetes integration][gitlab-k8s-integration]. This basically
allows to have a link to the Review App directly from the merge request
widget.
- If the Review App deployment fails, you can simply retry it (there's no need
to run the [`review-stop`][gitlab-ci-yml] job first).
- The manual [`review-stop`][gitlab-ci-yml] in the `test` stage can be used to
2019-07-31 22:56:46 +05:30
stop a Review App manually, and is also started by GitLab once a merge
request's branch is deleted after being merged.
- Review Apps are cleaned up regularly via a pipeline schedule that runs
2019-02-15 15:39:39 +05:30
the [`schedule:review-cleanup`][gitlab-ci-yml] job.
## QA runs
2019-07-31 22:56:46 +05:30
On every [pipeline][gitlab-pipeline] in the `qa` stage (which comes after the
`review` stage), the `review-qa-smoke` job is automatically started and it runs
the QA smoke suite.
2019-02-15 15:39:39 +05:30
2019-07-31 22:56:46 +05:30
You can also manually start the `review-qa-all`: it runs the full QA suite.
2019-02-15 15:39:39 +05:30
2019-07-07 11:18:12 +05:30
## Performance Metrics
2019-07-31 22:56:46 +05:30
On every [pipeline][gitlab-pipeline] in the `qa` stage, the
2019-07-07 11:18:12 +05:30
`review-performance` job is automatically started: this job does basic
2019-07-31 22:56:46 +05:30
browser performance testing using a
[Sitespeed.io Container](https://docs.gitlab.com/ee/user/project/merge_requests/browser_performance_testing.html).
2019-07-07 11:18:12 +05:30
2019-07-31 22:56:46 +05:30
## How to:
2019-07-07 11:18:12 +05:30
2019-07-31 22:56:46 +05:30
### Log into my Review App
2019-07-07 11:18:12 +05:30
The default username is `root` and its password can be found in the 1Password
secure note named **gitlab-{ce,ee} Review App's root password**.
2019-07-31 22:56:46 +05:30
### Enable a feature flag for my Review App
2019-07-07 11:18:12 +05:30
1. Open your Review App and log in as documented above.
1. Create a personal access token.
1. Enable the feature flag using the [Feature flag API](../../api/features.md).
2019-07-31 22:56:46 +05:30
### Find my Review App slug
2019-02-15 15:39:39 +05:30
1. Open the `review-deploy` job.
1. Look for `Checking for previous deployment of review-*`.
1. For instance for `Checking for previous deployment of review-qa-raise-e-12chm0`,
2019-07-31 22:56:46 +05:30
your Review App slug would be `review-qa-raise-e-12chm0` in this case.
2019-02-15 15:39:39 +05:30
2019-07-31 22:56:46 +05:30
### Run a Rails console
2019-02-15 15:39:39 +05:30
1. [Filter Workloads by your Review App slug](https://console.cloud.google.com/kubernetes/workload?project=gitlab-review-apps)
2019-07-31 22:56:46 +05:30
, e.g. `review-qa-raise-e-12chm0`.
1. Find and open the `task-runner` Deployment, e.g. `review-qa-raise-e-12chm0-task-runner`.
1. Click on the Pod in the "Managed pods" section, e.g. `review-qa-raise-e-12chm0-task-runner-d5455cc8-2lsvz`.
2019-02-15 15:39:39 +05:30
1. Click on the `KUBECTL` dropdown, then `Exec` -> `task-runner`.
2019-07-07 11:18:12 +05:30
1. Replace `-c task-runner -- ls` with `-it -- gitlab-rails console` from the
2019-07-31 22:56:46 +05:30
default command or
- Run `kubectl exec --namespace review-apps-ce review-qa-raise-e-12chm0-task-runner-d5455cc8-2lsvz -it -- gitlab-rails console` and
- Replace `review-apps-ce` with `review-apps-ee` if the Review App
is running EE, and
- Replace `review-qa-raise-e-12chm0-task-runner-d5455cc8-2lsvz`
with your Pod's name.
2019-02-15 15:39:39 +05:30
2019-07-31 22:56:46 +05:30
### Dig into a Pod's logs
2019-02-15 15:39:39 +05:30
2019-07-31 22:56:46 +05:30
1. [Filter Workloads by your Review App slug](https://console.cloud.google.com/kubernetes/workload?project=gitlab-review-apps),
e.g. `review-qa-raise-e-12chm0`.
2019-02-15 15:39:39 +05:30
1. Find and open the `migrations` Deployment, e.g.
2019-07-31 22:56:46 +05:30
`review-qa-raise-e-12chm0-migrations.1`.
2019-02-15 15:39:39 +05:30
1. Click on the Pod in the "Managed pods" section, e.g.
2019-07-31 22:56:46 +05:30
`review-qa-raise-e-12chm0-migrations.1-nqwtx`.
2019-02-15 15:39:39 +05:30
1. Click on the `Container logs` link.
2018-12-05 23:21:45 +05:30
## Frequently Asked Questions
2019-02-15 15:39:39 +05:30
**Isn't it too much to trigger CNG image builds on every test run? This creates
thousands of unused Docker images.**
2018-12-05 23:21:45 +05:30
2019-02-15 15:39:39 +05:30
> We have to start somewhere and improve later. Also, we're using the
CNG-mirror project to store these Docker images so that we can just wipe out
the registry at some point, and use a new fresh, empty one.
2018-12-05 23:21:45 +05:30
2019-02-15 15:39:39 +05:30
**How big are the Kubernetes clusters (`review-apps-ce` and `review-apps-ee`)?**
2018-12-05 23:21:45 +05:30
2019-02-15 15:39:39 +05:30
> The clusters are currently set up with a single pool of preemptible nodes,
2019-07-07 11:18:12 +05:30
with a minimum of 1 node and a maximum of 50 nodes.
2018-12-05 23:21:45 +05:30
**What are the machine running on the cluster?**
2019-07-07 11:18:12 +05:30
> We're currently using `n1-standard-16` (16 vCPUs, 60 GB memory) machines.
2018-12-05 23:21:45 +05:30
2019-02-15 15:39:39 +05:30
**How do we secure this from abuse? Apps are open to the world so we need to
find a way to limit it to only us.**
2018-12-05 23:21:45 +05:30
2019-02-15 15:39:39 +05:30
> This isn't enabled for forks.
2018-12-05 23:21:45 +05:30
2019-07-07 11:18:12 +05:30
## Other resources
* [Review Apps integration for CE/EE (presentation)](https://docs.google.com/presentation/d/1QPLr6FO4LduROU8pQIPkX1yfGvD13GEJIBOenqoKxR8/edit?usp=sharing)
2019-03-02 22:35:43 +05:30
[charts-1068]: https://gitlab.com/charts/gitlab/issues/1068
[gitlab-pipeline]: https://gitlab.com/gitlab-org/gitlab-ce/pipelines/44362587
[gitlab:assets:compile]: https://gitlab.com/gitlab-org/gitlab-ce/-/jobs/149511610
[review-build-cng]: https://gitlab.com/gitlab-org/gitlab-ce/-/jobs/149511623
[review-deploy]: https://gitlab.com/gitlab-org/gitlab-ce/-/jobs/149511624
2018-12-05 23:21:45 +05:30
[cng-mirror]: https://gitlab.com/gitlab-org/build/CNG-mirror
2019-07-31 22:56:46 +05:30
[cng]: https://gitlab.com/gitlab-org/build/CNG
[cng-mirror-pipeline]: https://gitlab.com/gitlab-org/build/CNG-mirror/pipelines/44364657
2018-12-05 23:21:45 +05:30
[cng-mirror-registry]: https://gitlab.com/gitlab-org/build/CNG-mirror/container_registry
[helm-chart]: https://gitlab.com/charts/gitlab/
2019-02-15 15:39:39 +05:30
[review-apps-ce]: https://console.cloud.google.com/kubernetes/clusters/details/us-central1-a/review-apps-ce?project=gitlab-review-apps
2018-12-05 23:21:45 +05:30
[review-apps-ee]: https://console.cloud.google.com/kubernetes/clusters/details/us-central1-b/review-apps-ee?project=gitlab-review-apps
[review-apps.sh]: https://gitlab.com/gitlab-org/gitlab-ee/blob/master/scripts/review_apps/review-apps.sh
[automated_cleanup.rb]: https://gitlab.com/gitlab-org/gitlab-ee/blob/master/scripts/review_apps/automated_cleanup.rb
[Auto-DevOps.gitlab-ci.yml]: https://gitlab.com/gitlab-org/gitlab-ce/blob/master/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml
2019-02-15 15:39:39 +05:30
[gitlab-ci-yml]: https://gitlab.com/gitlab-org/gitlab-ce/blob/master/.gitlab-ci.yml
2018-12-05 23:21:45 +05:30
[gitlab-k8s-integration]: https://docs.gitlab.com/ee/user/project/clusters/index.html
2019-02-15 15:39:39 +05:30
[password-bug]: https://gitlab.com/gitlab-org/gitlab-ce/issues/53621
2018-12-05 23:21:45 +05:30
---
[Return to Testing documentation](index.md)