Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I establish manual stages in Gitlab CI?

Tags:

I'd can't seem to find any documentation of manual staging in Gitlab CI in version 8.9. How do I do a manual stage such as "Deploy to Test"?

I'd like Gitlab CI to deploy a successful RPM to dev, and then once I've reviewed it, push to Test, and from there generate a release. Is this possible with Gitlab CI currently?

like image 590
Routhinator Avatar asked Aug 09 '15 13:08

Routhinator


People also ask

How do I start a manual in GitLab?

In GitLab CI/CD you can easily configure a job to require manual intervention before it runs. The job gets added to the pipeline, but doesn't run until you click the play button on it. Notice that the manual job gets skipped, and the pipeline completes successfully even though the manual job did not get triggered.

What is stage in GitLab CI?

A typical pipeline might consist of four stages, executed in the following order: A build stage, with a job called compile . A test stage, with two jobs called test1 and test2 . A staging stage, with a job called deploy-to-stage . A production stage, with a job called deploy-to-prod .

What does build stage do in GitLab?

It is often called a “build step”. It can be a build or compilation task; it can be running unit tests; it can be code quality check(s) like linting or code coverage thresholds checks; it can be a deployment task. A single job can contain multiple commands (scripts) to run.

Which file is used to specify the jobs within the GitLab CI pipeline?

yml` file | GitLab.


2 Answers

You can set tasks to be manual by using when: manual in the job (documentation).

So for example, if you want to want the deployment to happen at every push but give the option to manually tear down the infrastructure, this is how you would do it:

stages:
  - deploy
  - destroy

deploy:
  stage: deploy
  script:
    - [STEPS TO DEPLOY]

destroy:
  stage: destroy
  script:
    - [STEPS TO DESTROY]
  when: manual

With the above config, if you go to the GitLab project > Pipelines, you should see a play button next to the last commit. When you click the play button you can see the destroy option.

like image 64
LondonAppDev Avatar answered Sep 18 '22 13:09

LondonAppDev


Update: Manual actions were Introduced in GitLab 8.10. From the manual "Manual actions are a special type of job that are not executed automatically; they need to be explicitly started by a user. Manual actions can be started from pipeline, build, environment, and deployment views. You can execute the same manual action multiple times." An example usage of manual actions is deployment to production. The rest of this answer applies to Gitlab 8.9 and older only.

Historical Answer:

It does not appear as though manual deploy/release was available in Gitlab in 8.9.

One possibility is to have a protected branch which triggers a release. See info about protected branches here: http://doc.gitlab.com/ce/workflow/protected_branches.html

Essentially a protected branch would allow you to Create a branch (testdeploybranch) which only you would be allowed to merge code into. Whenever a commit to dev would pass the Gitlab CI tests and deploy jobs, as well as your manual review, you could merge that commit into the protected branch to trigger the release. For this branch you can then set up a special release job in Gitlab CI using the only option in the .gitlab-ci.yml job definition. Read more here: http://doc.gitlab.com/ci/yaml/README.html

So something like this:

release:
  only: testdeploybranch
  type: release
  script: some command or script invocation to deploy to Test

This might not be exactly what you are after, but it does allow you to do manual releases from Gitlab. It does not provide an easy way to manually do the same release procedure manually for different servers. Perhaps someone else might be able to expand on this strategy.

like image 42
Snorre Avatar answered Sep 21 '22 13:09

Snorre