Gitlab CI/CD:将 docker 镜像部署到现有的 kubernetes 集群

时间:2021-03-15 03:44:53

标签: docker kubernetes gitlab gitlab-ci kops

我有需要部署到现有 kubernetes 集群的 node.js 应用程序。

集群是在 AWS 上使用 kops 设置的。

我已经创建了 .gitlab-ci.yml 文件来构建 docker 镜像。

因此,每当将更改推送到 masterdevelop 分支时。它将构建 docker 镜像。

我已经按照定义 here 的步骤添加现有集群。

现在,我必须将更新滚动到现有的 kubernetes 集群..

# This file is a template, and might need editing before it works on your project.
docker-build-master:
  # Official docker image.
  image: docker:latest
  stage: build
  services:
    - docker:dind
  before_script:
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
  script:
    - docker build --pull -t "$CI_REGISTRY_IMAGE:prod" .
    - docker push "$CI_REGISTRY_IMAGE:prod"
  only:
    - master

docker-build-dev:
  # Official docker image.
  image: docker:latest
  stage: build
  services:
    - docker:dind
  before_script:
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
  script:
    - docker build --pull -t "$CI_REGISTRY_IMAGE:dev" .
    - docker push "$CI_REGISTRY_IMAGE:dev"
  only:
    - develop

目前,我使用的是共享跑步者。

用gitlab ci/cd构建镜像后,如何集成kubernetes部署到aws上部署(集群是用kops创建的)?

对于注册表,我使用的是 gitlab 的容器注册表,而不是 docker hub。

更新

我在下面更改了配置和操作,

stages:
  - docker-build
  - deploy

docker-build-master:
  image: docker:latest
  stage: docker-build
  services:
    - docker:dind
  before_script:
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
  script:
    - docker build --pull -t "$CI_REGISTRY_IMAGE:prod" .
    - docker push "$CI_REGISTRY_IMAGE:prod"
  only:
    - master

deploy-prod:
  stage: deploy
  image: roffe/kubectl
  script:
    - kubectl apply -f scheduler-deployment.yaml
  only:
    - master


docker-build-dev:
  image: docker:latest
  stage: docker-build
  services:
    - docker:dind
  before_script:
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
  script:
    - docker build --pull -t "$CI_REGISTRY_IMAGE:dev" .
    - docker push "$CI_REGISTRY_IMAGE:dev"
  only:
    - develop

但现在我遇到了以下错误。

roffe/kubectl with digest roffe/kubectl@sha256:ba13f8ffc55c83a7ca98a6e1337689fad8a5df418cb160fa1a741c80f42979bf ...
$ kubectl apply -f scheduler-deployment.yaml
error: the path "scheduler-deployment.yaml" does not exist
Cleaning up file based variables
00:01
ERROR: Job failed: exit code 1

文件 scheduler-deployment.yaml 确实存在于根目录中。

0 个答案:

没有答案