GitLab CI/CD gitlabci

ENV variables
https://docs.gitlab.com/ee/ci/variables/predefined_variables.html

Build and push Docker Images with Gitlab CI

# .gitlab-ci.yml
build:
  stage: build
  image: docker:19.03.1
  services:
    - docker:dind
  before_script:
    - echo -n $CI_JOB_TOKEN | docker login -u gitlab-ci-token --password-stdin $CI_REGISTRY
  script:
    - docker build --pull -t "$CI_REGISTRY_IMAGE" .
    - docker push "$CI_REGISTRY_IMAGE"
  tags:
    - docker
 
# Dockerfile
FROM alpine:3.10
 
RUN apk add --no-cache nginx

Reuse commands across Gitlab jobs
https://jsramblings.com/three-ways-to-reuse-commands-across-gitlab-jobs/

.prepare_step:
  before_script:
    - echo 'prepare'
 
build:
  extends:
    - .prepare_step
  script:
    - echo 'build'
 
test:
  extends:
    - .prepare_step
  script:
    - echo 'test'

Checkout additional repository witht SSH key
https://stackoverflow.com/questions/44363537/gitlab-ci-ssh-permission-denied-publickey-password
https://docs.gitlab.com/ee/ci/ssh_keys/

  script:
    - mkdir -p ~/.ssh
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa
    - chmod 700 ~/.ssh/id_rsa

Checkout additional repository with token

  script:
    - 'git clone --branch master git@git.i.example.com:foo/bar.git $CI_BUILDS_DIR/deploy'

Links
https://about.gitlab.com/2016/05/23/gitlab-container-registry/