Administrator
Administrator
发布于 2025-08-29 / 13 阅读
0
0

Jenkins+Argocd自动化部署K8s容器

下载安装的yaml文件

[root@k8s-master1-60 ~]# mkdir argocd
[root@k8s-master1-60 ~]# cd argocd/
[root@k8s-master1-60 argocd]# wget https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

下载Argocd所需镜像(三个镜像)

[root@k8s-master1-60 argocd]# cat install.yaml |grep image: | sort -n | uniq -c
      1         image: ghcr.io/dexidp/dex:v2.43.0
      1         image: public.ecr.aws/docker/library/redis:7.2.7-alpine
      8         image: quay.io/argoproj/argocd:v3.1.3
[root@k8s-master1-60 argocd]# docker pull ghcr.io/dexidp/dex:v2.43.0
[root@k8s-master1-60 argocd]# docker pull public.ecr.aws/docker/library/redis:7.2.7-alpine
[root@k8s-master1-60 argocd]# docker pull quay.io/argoproj/argocd:v3.1.3

修改镜像tag、上传到私有镜像仓库

[root@k8s-master1-60 argocd]# docker tag quay.io/argoproj/argocd:v3.1.1 swr.cn-east-3.myhuaweicloud.com/beijia/argocd:v3.1.1
[root@k8s-master1-60 argocd]# docker tag public.ecr.aws/docker/library/redis:7.2.7-alpine swr.cn-east-3.myhuaweicloud.com/beijia/redis:7.2.7-alpine
[root@k8s-master1-60 argocd]# docker tag ghcr.io/dexidp/dex:v2.43.0 swr.cn-east-3.myhuaweicloud.com/beijia/dex:v2.43.0
[root@k8s-master1-60 argocd]# docker pull swr.cn-east-3.myhuaweicloud.com/beijia/dex:v2.43.0
[root@k8s-master1-60 argocd]# docker pull swr.cn-east-3.myhuaweicloud.com/beijia/redis:7.2.7-alpine
[root@k8s-master1-60 argocd]# docker pull swr.cn-east-3.myhuaweicloud.com/beijia/argocd:v3.1.1

修改替换install.yaml文件、拉取私有仓库镜像进行启动部署

[root@k8s-master1-60 argocd]# sed -i 's#image: quay.io/argoproj/argocd:v3.1.3#image: swr.cn-east-3.myhuaweicloud.com/beijia/argocd:v3.1.1#g' install.yaml
[root@k8s-master1-60 argocd]# sed -i 's#image: public.ecr.aws/docker/library/redis:7.2.7-alpine#image: swr.cn-east-3.myhuaweicloud.com/beijia/redis:7.2.7-alpine#g' install.yaml
[root@k8s-master1-60 argocd]# sed -i 's#image: ghcr.io/dexidp/dex:v2.43.0#image: swr.cn-east-3.myhuaweicloud.com/beijia/dex:v2.43.0#g' install.yaml
[root@k8s-master1-60 argocd]# cat install.yaml |grep image: | sort -n | uniq -c
      8         image: swr.cn-east-3.myhuaweicloud.com/beijia/argocd:v3.1.1
      1         image: swr.cn-east-3.myhuaweicloud.com/beijia/dex:v2.43.0
      1         image: swr.cn-east-3.myhuaweicloud.com/beijia/redis:7.2.7-alpine

配置镜像拉取的密钥

[root@k8s-master1-60 argocd]# cat install.yaml |grep "imagePullPolicy: Always"
        imagePullPolicy: Always
        imagePullPolicy: Always
        imagePullPolicy: Always
        imagePullPolicy: Always
        imagePullPolicy: Always
        imagePullPolicy: Always
        imagePullPolicy: Always
        imagePullPolicy: Always

#在所有的imagePullPolicy: Always行下面添加以下内容
        imagePullSecrets:
          - name: huawei-images

#实例:
        image: swr.cn-east-3.myhuaweicloud.com/beijia/argocd:v3.1.1
        imagePullPolicy: Always
        imagePullSecrets:
          - name: huawei-images

执行部署文件install.yaml

[root@k8s-master1-60 argocd]# kubectl apply -f install.yaml
########等待镜像启动完成如下
[root@k8s-master1-60 argocd]# kubectl get deployments.apps -n argocd 
NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
argocd-applicationset-controller   1/1     1            1           6d23h
argocd-dex-server                  1/1     1            1           6d23h
argocd-notifications-controller    1/1     1            1           6d23h
argocd-redis                       1/1     1            1           6d23h
argocd-repo-server                 1/1     1            1           6d23h
argocd-server                      1/1     1            1           6d23h

[root@k8s-master1-60 argocd]# kubectl get pod -n argocd 
NAME                                               READY   STATUS    RESTARTS   AGE
argocd-application-controller-0                    1/1     Running   0          6d23h
argocd-applicationset-controller-957474ff5-7nrpn   1/1     Running   0          6d23h
argocd-dex-server-bc97497c6-579rf                  1/1     Running   0          6d23h
argocd-notifications-controller-7d797bf45b-chbnc   1/1     Running   0          6d23h
argocd-redis-74b74f9968-nlmhj                      1/1     Running   0          6d23h
argocd-repo-server-7c96dfd669-sk82d                1/1     Running   0          6d23h
argocd-server-5b8bb8cd8c-bh9kd                     1/1     Running   0          6d23h

查看svc端口进行登录

https://172.30.42.63:30786/

查看初始admin密码

[root@k8s-master1-60 argocd]# kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server -o name | cut -d'/' -f 2
argocd-server-5b8bb8cd8c-bh9kd

配置项目步骤

新建一个项目Settings → Projects → NEW PROJECTS

配置新建的Projects、直接点击新建的Projects

添加仓库地址,Settings → Repositories → +CONNECT REPO

选择连接仓库的类型:此次选择http方式

填写如下信息、然后点击红框内的按钮进行创建

代码仓库准备部署的yaml文件和Jenkinsfile文件、当然还有Dockerfile文件

1:deployment部署文件
[root@gitlab-70 deployment]# cat deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ruoyi-gateway
  namespace: beijia
  labels:
    app: ruoyi-gateway
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ruoyi-gateway
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      name: ruoyi-gateway
      namespace: mall
      labels:
        app: ruoyi-gateway
    spec:
      affinity: {}
      containers:
      - image: swr.cn-east-3.myhuaweicloud.com/beijia/ruoyi-gateway:1753692859
        name: ruoyi-gateway
        ports:
        - containerPort: 80
          protocol: TCP
        imagePullPolicy: IfNotPresent
        resources:
          limits:
            cpu: '1'
            memory: 2Gi
          requests:
            cpu: '500m'
            memory: 1Gi
      imagePullSecrets:
      - name: huawei-image
      dnsPolicy: ClusterFirst
      restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  name: ruoyi-gateway
  namespace: beijia
  labels:
    app: ruoyi-gateway
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
      app: ruoyi-gateway
  type: ClusterIP
##########################################################################################################################################
2:Jenkinsfile文件
[root@gitlab-70 ruoyi-gateway]# cat Jenkinsfile 
pipeline {
    agent any
    environment {
        REGISTRY= "swr.cn-east-3.myhuaweicloud.com"
        IMAGE_TAG = sh(script: "echo `date '+%s'`", returnStdout: true).trim()
  }

    stages {
        stage ('拉取代码') {
            steps {
                checkout scmGit(branches: [[name: '${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: '1', url: 'http://172.30.42.70/root/ruoyi_cloud.git']])
            }
        }

        stage ('打包构建') {
            steps {
                sh 'mvn clean package -Dmaven.test.skip=true'
            }
        }
        
        stage ('镜像构建并推送到远程仓库') {
            steps {
                sh 'cd ${WORKSPACE}/ruoyi-gateway/target/ && cp ../Dockerfile ./ && docker build -t swr.cn-east-3.myhuaweicloud.com/beijia/ruoyi-gateway:${IMAGE_TAG} .'
                sh 'docker push swr.cn-east-3.myhuaweicloud.com/beijia/ruoyi-gateway:${IMAGE_TAG}'
            }
        }
        
        stage ('提交配置变更') {
            steps {
                sh 'rm -rf ruoyi_cloud'
                sh 'git clone git@172.30.42.70:root/ruoyi_cloud.git'
                dir('ruoyi_cloud/ruoyi-gateway/deployment') {
                sh "sed -i 's/gateway:.*/gateway:${IMAGE_TAG}/' deployment.yaml"
                sh 'git add deployment.yaml'
                sh 'git commit -am "deploy ${IMAGE_TAG}"'
                sh 'git push origin master'
                }
            }
        }
    }
}
################################################################################################################################################
3:Dockerfile文件
[root@gitlab-70 ruoyi-gateway]# cat Dockerfile 
# 基础镜像
FROM swr.cn-east-3.myhuaweicloud.com/beijia/jdk8:latest
# author
MAINTAINER beijia

# 创建目录
RUN mkdir -p /home/ruoyi
# 指定路径
WORKDIR /home/ruoyi
# 复制jar文件到路径
COPY ./ruoyi-gateway.jar /home/ruoyi/ruoyi-gateway.jar
# 设置 JVM 启动参数
ENV JAVA_OPTS="-Xms1024m -Xmx1024m -Djava.security.egd=file:/dev/./urandom -Dfile.encoding=utf-8"
# 启动网关服务
ENTRYPOINT java ${JAVA_OPTS} -jar ruoyi-gateway.jar

新建Applications(具体跑的容器项目)

点击创建

点击SYNC进行同步部署

查看部署结果

/[root@k8s-master1-60 argocd]# kubectl get deployments.apps -n beijia ruoyi-gateway 

NAME            READY   UP-TO-DATE   AVAILABLE   AGE

ruoyi-gateway   1/1     1            1           29m

[root@k8s-master1-60 argocd]# kubectl get pod -n beijia ruoyi-gateway-84756c8d4c-4blxg 

NAME                             READY   STATUS    RESTARTS      AGE

ruoyi-gateway-84756c8d4c-4blxg   1/1     Running   3 (27m ago)   30m


评论