gpt4 book ai didi

jenkins - 使用 GitHub/Jenkins/Kubernetes 实现 CI/CD 管道时的最佳实践

转载 作者:行者123 更新时间:2023-12-02 11:51:59 24 4
gpt4 key购买 nike

这个问题与建议有关,所以我希望它不会被标记为任何东西。只是真的需要帮助:(

尝试使用 GitHub/Jenkins/Kubernetes 实现 CI/CD。

在高层次上,这是应该发生的:

  • 在 Jenkins 上构建
  • 推送到容器注册表
  • 在 Kubernetes 开发集群上部署构建的镜像
  • 在开发集群上完成测试后,将其部署到客户端
    测试集群,最后是生产集群

  • 到目前为止,这就是我在 Jenkins 上创建的作业,它将使用 Github 钩子(Hook)触发。
    该工作负责以下事项:
  • 从 GitHub 结帐
  • 运行单元测试/调用 REST API 并发送单元测试结果
  • 使用 Maven 构建工件/调用 REST API 并通知是否构建
    成败
  • 构建 docker 镜像
  • 将 docker 镜像推送到容器注册表(docker 镜像将有
    与 BUILD_NUMBER 环境变量匹配的递增版本)

  • 上述任务或多或少已完成,我不需要太多帮助(除非有人认为上述步骤不是最佳实践)

    我在部署到 Kubernetes 集群的部分确实需要帮助。

    对于本地测试,我使用 Vagrant box 建立了一个本地集群,它可以工作。为了在开发集群上部署构建的图像,我正在考虑这样做:
    Point Jenkins 构建服务器到 Kubernetes 开发集群
    使用 deployment.yml 和 service.yml 进行部署(在我的仓库中可用)
    这部分我需要帮助...

    这是错误的做法吗?有没有更好/更简单的方法来做到这一点?

    还有没有办法在集群之间迁移?例如:开发集群到客户端测试集群和客户端测试集群到生产集群等

    在互联网上搜索时,Helm 这个名字出现了很多,但我不确定它是否适用于我的用例。我会测试一下,但我有点时间紧迫,这就是为什么我不能

    将不胜感激你们都可以提供的任何帮助。

    非常感谢

    最佳答案

    有无数种方法可以做到这一点。在你刚刚开始的时候,暂时把 Helm 拿出来。

    如果您已经在使用 Github 和 docker,那么我只建议您将代码/更改/配置/Dockerfile 推送到 Github,这将自动触发 Dockerhub 上的 docker 构建(如果您不想使用 dockerhub,则可能是 jenkins builds ) ,它可以是一个多阶段的 docker build ,您可以在其中构建代码、运行测试、丢弃 dev environmenet ,最后生成一个生产 docker 镜像,一旦生成镜像,它将触发一个 web Hook 到您的 kubernetes 部署要部署的作业/ list 以测试 evironmenet ,然后手动触发以部署到生产环境。

    Docker 镜像可以基于 Github/Git 中提交的 SHA 进行标记,以便您可以基于提交进行部署和回滚。

    引用:https://cloud.google.com/kubernetes-engine/docs/tutorials/gitops-cloud-build

    这是我的 Gtips 工作流的 Gitlab 实现:

    # Author , IjazAhmad

    image: docker:latest

    stages:
    - build
    - test
    - deploy

    services:
    - docker:dind

    variables:
    CI_REGISTRY: dockerhub.example.com
    CI_REGISTRY_IMAGE: $CI_REGISTRY/$CI_PROJECT_PATH
    DOCKER_DRIVER: overlay2

    before_script:
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY

    docker-build:
    stage: build
    script:
    - docker pull $CI_REGISTRY_IMAGE:latest || true
    - docker build --cache-from $CI_REGISTRY_IMAGE:latest --tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA --tag $CI_REGISTRY_IMAGE:latest .

    docker-push:
    stage: build
    script:
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
    - docker push $CI_REGISTRY_IMAGE:latest

    unit-tests:
    stage: test
    script:
    - echo "running unit testson the image"
    - echo "running security testing on the image"
    - echo "pushing the results to build/test pipeline dashboard"


    sast:
    stage: test
    script:
    - echo "running security testing on the image"
    - echo "pushing the results to build/test pipeline dashboard"


    dast:
    stage: test
    script:
    - echo "running security testing on the image"
    - echo "pushing the results to build/test pipeline dashboard"


    testing:
    stage: deploy
    script:
    - sed -i "s|CI_IMAGE|$CI_REGISTRY_IMAGE|g" k8s-configs/deployment.yaml
    - sed -i "s|TAG|$CI_COMMIT_SHA|g" k8s-configs/deployment.yaml
    - kubectl apply --namespace webproduction-test -f k8s-configs/
    environment:
    name: testing
    url: https://testing.example.com

    only:
    - branches


    staging:
    stage: deploy
    script:
    - sed -i "s|CI_IMAGE|$CI_REGISTRY_IMAGE|g" k8s-configs/deployment.yaml
    - sed -i "s|TAG|$CI_COMMIT_SHA|g" k8s-configs/deployment.yaml
    - kubectl apply --namespace webproduction-stage -f k8s-configs/
    environment:
    name: staging
    url: https://staging.example.com
    only:
    - master



    production:
    stage: deploy
    script:
    - sed -i "s|CI_IMAGE|$CI_REGISTRY_IMAGE|g" k8s-configs/deployment.yaml
    - sed -i "s|TAG|$CI_COMMIT_SHA|g" k8s-configs/deployment.yaml
    - kubectl apply --namespace webproduction-prod -f k8s-configs/
    environment:
    name: production
    url: https://production.example.com
    when: manual
    only:
    - master

    Pipeline

    链接:

    Trigger Jenkins builds by pushing to Github

    Triggering a Jenkins build from a push to Github

    Jenkins: Kick off a CI Build with GitHub Push Notifications

    关于jenkins - 使用 GitHub/Jenkins/Kubernetes 实现 CI/CD 管道时的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57043048/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com