Kubernetes+Gitlab+Jenkins+ArgoCD多集群部署
文章目录
- Kubernetes+Gitlab+Jenkins+ArgoCD多集群部署
- 1. Kubernetes+Gitlab+Jenkins+ArgoCD多集群部署
- 2. 添加WebHooks自动触发
- 3. Jenkins-构建-执行Shell
- 4. 制作镜像及修改Yaml文件
- 4.1 Dockerfile
- 4.2 Build-Shell
- 5.自动部署Demo测试
- 5.1 推送代码至仓库特定分支
- 5.2 WebHookS自动触发
- 5.3 镜像及Yaml自动Push成功
- 5.4 ArgoCD检测到Yaml文件发生变化
- 5.5 ArgoCD与Gitlab对比仓库哈希值与Commit值
- 5.6 部署成功,钉钉告警提示
- 6.小结
1. Kubernetes+Gitlab+Jenkins+ArgoCD多集群部署
在企业级环境中,由于业务的需要会有许多Kubernetes集群需要管理,比如Dev环境,UAT环境,Pro环境等.
每次发布和上线都需要分别登录不同集群进行部署项目.如果我们使用了ArgoCD,它可以支持多集群部署,大大提高了效率和准确性.
ArgoCD允许同时向多个集群部署应用,还可以轻松地管理不同环境的配置,轻松部署应用程序,提高生产效率.
此文档,重新规划了CI/CD流程,以符合公司的现有架构和技术需求.它将有助于我们的团队更加高效地部署代码,减少人工干预和错误率,从而提高生产效率.
2. 添加WebHooks自动触发
找到Jenkins上的项目并且添加`构建触发器`.
下图中两处的值是要填写到`Gitlab-WebHooks`中的.
找到Gitlab项目对应的仓库,设置webhooks.
Jenkins`构建触发器`中可以找到此处所对应的值.
3. Jenkins-构建-执行Shell
#!/bin/bash
K8S_IP="192.168.45.12"
K8S_PORT="22"
K8S_CODE="/opt/k8s-yaml/java-demo"
JKS_CODE="/var/lib/jenkins/workspace/javademo"
JKS_TAR="java-webhook"
Build_SHELL="build-webhook"
cd $JKS_CODE && mvn clean package
cd $JKS_CODE/target
tar czf $JKS_TAR.tar.gz *.jar
ssh -p $K8S_PORT root@$K8S_IP "cd $K8S_CODE && rm -rf *.jar $JKS_TAR.tar.gz"
scp -P $K8S_PORT $JKS_CODE/target/$JKS_TAR.tar.gz root@$K8S_IP:$K8S_CODE
ssh -p $K8S_PORT root@$K8S_IP "cd $K8S_CODE && tar xf $JKS_TAR.tar.gz"
ssh -p $K8S_PORT root@$K8S_IP "cd $K8S_CODE && bash $Build_SHELL.sh"
cd $JKS_CODE && rm -rf *
4. 制作镜像及修改Yaml文件
4.1 Dockerfile
FROM openjdk:8-jdk-alpine
WORKDIR /app
COPY www-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8088
ENV JAVA_OPTS="-Xms1024m -Xmx1024m -XX:+UseConcMarkSweepGC -XX:+DoEscapeAnalysis -XX:+EliminateAllocations -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails"
CMD exec java $JAVA_OPTS -jar app.jar
4.2 Build-Shell
#!/bin/bash
version=`date +%y%m%d%H%M%S`
YAML="java-deploy"
YAML_CODE="/opt/k8s-yaml/java-demo/java-demo-yaml"
echo "即将制作业务镜像!!!"
docker build -t swr.ap-southeast-1.myhuaweicloud.com/dev/java-demo:${version} .
echo "镜像构建完成,即将上传至镜像仓库" && sleep 1
docker push swr.ap-southeast-1.myhuaweicloud.com/dev/java-demo:${version}
echo "镜像已上传至镜像仓库" && sleep 1
echo "修改Yaml并推送至Git仓库" && sleep 1
cd $YAML_CODE && sed -i "s/image: swr.ap-southeast-1.myhuaweicloud.*/image: swr.ap-southeast-1.myhuaweicloud.com\/dev\/java-demo:${version}/g" $YAML.yaml
echo "修改成功,正在推送代码至Git仓库" && sleep 1
cd $YAML_CODE && git add ./ && git commit -m "${version}" && git push -u origin main
echo "推送代码成功,3分钟左右,ArgoCD会自动发布到指定K8S集群中" && sleep 1
5.自动部署Demo测试
5.1 推送代码至仓库特定分支
5.2 WebHookS自动触发
5.3 镜像及Yaml自动Push成功
5.4 ArgoCD检测到Yaml文件发生变化
5.5 ArgoCD与Gitlab对比仓库哈希值与Commit值
5.6 部署成功,钉钉告警提示
6.小结
文档至此我们已经完成了Kubernetes+GitLab+Jenkins+ArgoCD多集群部署,使用Gitlab统一管理YAML文件,极大地提高了工作效率.