Skip to content

entrega no k8s

configure as variaveis

Essa esteira depende dessas variáveis configuradas.

REGISTRY_USER
REGISTRY_PASS
REGISTRY_URL
KUBE_CREDENTIALS
K8S_APP_NAME
K8S_NAMESPACE

crie a esteira

Essa esteira depende de runners docker-dind tipo service, sem tls.

variables:
  IMAGE_BUILD: docker:26.1.3
  IMAGE_DIND: docker:26.1.3-dind
  IMAGE_DEPLOY: bitnami/kubectl:1.30
  DOCKER_HOST: tcp://docker:2375
  DOCKER_TLS_CERTDIR: ""
services:
  - $IMAGE_DIND

stages:
  - build
  - deploy

image_linter:
  stage: build
  image: pipelinecomponents/hadolint
  tags:
    - docker
  only:
    - dev
    - release/sprint1
    - release/sprint2
    - release/sprint3
  script:
    - hadolint Dockerfile

compose_linter:
  stage: build
  image: pipelinecomponents/yamllint
  needs:
      - image_linter
  tags:
    - docker
  only:
    - dev
    - release/sprint1
    - release/sprint2
    - release/sprint3
  script:
    - yamllint docker-compose.yml

build_push_image:
  stage: build
  needs:
    - compose_linter
  image: $IMG_BUILD
  tags:
    - dind
  only:
    - dev
    - release/sprint1
    - release/sprint2
    - release/sprint3
  before_script:
    - docker info
  script:
    - docker build -t app:latest .
    - docker login -u $REGISTRY_USER -p $REGISTRY_PASS $REGISTRY_URL
    - docker tag app:latest $IMAGE_URL:$CI_PIPELINE_ID
    - docker push $IMAGE_URL:$CI_PIPELINE_ID
    - docker image rm $IMAGE_URL:$CI_PIPELINE_ID
    - docker image rm app:latest

deploy_dev:
  stage: deploy
  needs:
    - build_push_image
  tags:
    - docker
  image:
    name: bitnami/kubectl:1.30
    entrypoint: [""]
  only:
    - dev
    - release/sprint1
    - release/sprint2
    - release/sprint3
  before_script:
    - echo $KUBE_CREDENTIALS | base64 -d > config
    - export KUBECONFIG=config
  script:
    - envsubst < k8s/app/deployment.yml | kubectl apply -f -  
    - kubectl rollout restart deployment/${K8S_APP_NAME} -n ${K8S_NAMESPACE}