基于k8s的cicd流水线(containerd)

发布于 22 天前  21 次阅读


def gitlab_auth = "6f09382c-0aa3-4cb2-9721-7a87950aa7ac"
def code_addr = "https://**************.git"
def k8s_auth = "e892c72a-0eb4-40e3-80f3-80ec85da8982"
def image_name = "**************/ruoyi-end:${env.BUILD_NUMBER}"
pipeline {
  agent {
    kubernetes {
      label "jenkins-agent"
      yaml '''
apiVersion: v1
kind: Pod
metadata:
  name: jenkins-agent
spec:
  securityContext:
    runAsUser: 0
    fsGroup: 1000
  containers:
  - name: jnlp
    image: "*********************/jenkins-agent"
    volumeMounts:
      - name: workspace
        mountPath: /home/jenkins/agent/workspace/
    securityContext:
      runAsUser: 0
  - name: kaniko
    image: "swr.cn-north-4.myhuaweicloud.com/ddn-k8s/gcr.io/kaniko-project/executor:v1.23.1-debug"
    command: ['cat']
    tty: true
    securityContext:
      runAsUser: 0
    volumeMounts:
      - name: docker-config
        mountPath: /kaniko/.docker
      - name: workspace
        mountPath: /home/jenkins/agent/workspace/
      - name: maven-data
        mountPath: /root/.m2
  imagePullSecrets: 
    - name: aliyun-auth
  volumes:
    - name: docker-config
      secret:
        secretName: aliyun-auth
        items:
        - key: .dockerconfigjson
          path: config.json
    - name: workspace
      emptyDir: {}
    - name: maven-data
      hostPath:
        path: /tmp/m2
        type: DirectoryOrCreate
'''
    }
  }
  parameters {
    gitParameter branch: '', branchFilter: '.*', defaultValue: 'origin/master', description: '请选择你要发布的分支', name: 'Branch', quickFilterEnabled: false, selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '*', type: 'GitParameterDefinition'
    choice choices: ['1', '3', '5'], description: '请选择你要发布的副本数', name: 'Replicas'
}
  stages {
    stage('1、拉取代码') {
      steps {
        checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: "${gitlab_auth}", url: "${code_addr}"]])
        sh '''
          echo "workspace: ${WORKSPACE}"
          chmod 755 /home/jenkins/agent/workspace
          find ${WORKSPACE}@tmp/ -name "*.sh.copy" -exec chmod +x {} \\;
        '''
      }
    }
    stage('2、代码编译') {
      steps {
        container('jnlp') {
          sh '''
            mvn clean package -Dmaven.test.skip=true
          '''
        }
      }
    }
    stage('3、构建镜像') {
      steps {
        container('kaniko') {
          sh '''
            cd ${WORKSPACE}
            cat > Dockerfile <<EOF
            FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/openjdk:17.0.2-jdk
            WORKDIR /app
            COPY ruoyi-admin/target/ruoyi-admin.jar .
            CMD ["java","-jar","ruoyi-admin.jar"]
EOF
            ls -l ruoyi-admin/target/ruoyi-admin.jar  # 确认文件存在
            /kaniko/executor \\
              --context ${WORKSPACE} \\
              --dockerfile Dockerfile \\
              --destination *****************/ruoyi-end:${BUILD_NUMBER}
          '''
        }
      }
    }
    stage('4、发布到k8s') {
      steps {
        container('jnlp') {
          configFileProvider([configFile(fileId: "${k8s_auth}", targetLocation: 'aliyun-k8s')]) {
          sh """
            echo "${image_name}"
            sed -i "s#image_name#${image_name}#" ruoyi-end.yaml
            cat ruoyi-end.yaml
            kubectl --kubeconfig=aliyun-k8s apply -f  ruoyi-end.yaml 
          """
          }
        }
      }
    }
  }
}
届ける言葉を今は育ててる
最后更新于 2025-05-06