该问题与更多建议相关,因此我希望不要提出任何疑问。只是真的需要帮助:(
尝试使用GitHub / Jenkins / Kubernetes实施CI / CD。
总的来说,这应该发生:
到目前为止,这就是我在Jenkins上创建的作业,该作业将使用Github钩子触发。 这项工作负责以下事情:
上述任务或多或少已经完成,我不需要太多帮助(除非有人认为上述步骤不是最佳实践)
在部署到Kubernetes集群的部分上确实需要帮助。
对于本地测试,我已经使用Vagrant框设置了本地群集,并且可以正常工作。为了在开发集群上部署构建的映像,我正在考虑这样做: 将Jenkins构建服务器指向Kubernetes开发集群 使用deploy.yml和service.yml进行部署(在我的仓库中可用) 这部分需要我的帮助...
这是错误的做法吗?有没有更好/更容易的方法?
还有一种在集群之间迁移的方法吗?例如:开发集群到客户端测试集群,客户端测试集群到生产集群等
在Internet上搜索时,Helm这个名字出现了很多,但是我不确定它是否适用于我的用例。我会对其进行测试,然后看,但是我对时间的需求有点紧张,这就是为什么我不能
希望您能提供任何帮助。
非常感谢
答案 0 :(得分:2)
有无数种方法可以做到这一点。刚开始时,立即将Helm拿出来。
如果您已经在使用Github和docker,那么我建议您将代码/更改/配置/ Dockerfile推送到Github,这将自动触发Dockerhub上的docker构建(如果您不想的话,可能是jenkins)使用dockerhub进行构建),它可以是一个多阶段的docker构建,您可以在其中构建代码,运行测试,丢弃dev environmenet,最终生成生产docker映像,一旦生成映像,它将触发一个Web钩子到您的kubernetes部署作业/清单将部署到测试evironmenet上,然后是手动triiger部署到生产中。
可以基于Github / Git中提交的SHA标记docker镜像,以便您可以基于提交进行部署和回滚。
参考: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
链接:
Trigger Jenkins builds by pushing to Github
答案 1 :(得分:1)
我了解您正在尝试实现GitOps,我的建议是阅读本文,从这里您可以开始了解有关所需组件的更多信息。
https://www.weave.works/blog/managing-helm-releases-the-gitops-way
基本上,您需要为自定义服务实现自己的头盔图并使用助焊剂对其进行管理,我建议每个环境使用不同的存储库,并让助焊剂根据主分支的状态来管理对每个环境的部署在仓库中。
答案 2 :(得分:1)
查看大三角帆以连续交付。生成映像并将其推送到注册表后,将大三角帆中的Web钩子触发到所需kubernetes集群的部署。大三角帆与kubernetes配合良好,您绝对应该尝试一下