从Jenkinsfile构建到k8s部署

28 篇文章 2 订阅
22 篇文章 0 订阅
文章详细描述了一个Jenkinsfile,用于自动化构建SpringCloudEureka应用程序,包括从Git仓库拉取代码,构建Docker镜像,以及将镜像部署到Kubernetes集群。涉及到的工具和技术有Jenkins、Docker、Harbor、GitLab和Kubernetes。
摘要由CSDN通过智能技术生成

Jenkinsfile

def registry = "harbor.uat.testtest.com.cn"
def project = "uat"
def app_name = "springcloud-eureka-api"
def jenkins_slave_image = "${registry}/uat/jenkins-slave-maven-centos7:v1"
def image_name = "${registry}/${project}/${app_name}:${BUILD_NUMBER}"
def git_address = "http://gitlab.gic.testtest.com.cn/springcloud-framework/springcloud-eureka.git"
def docker_registry_auth = "harbor"
def git_auth = "gitlab-gic"
def k8s_auth = "kube-config-rancher"
def k8s_cloud_name = "rancher"
def eureka_access = 'defaultZone: http://${eureka.host1}:8010/eureka/,http://${eureka.host2}:8010/eureka/'
def jar_name = 'springcloud-eureka.jar'
def label_name = "jenkins-slave-${app_name}"

podTemplate(label: "$label_name", cloud: "$k8s_cloud_name", containers: [
    containerTemplate(
        name: 'jnlp',
        image: "${jenkins_slave_image}"
    ),
  ],
  volumes: [
    hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock'),
    hostPathVolume(mountPath: '/usr/bin/docker', hostPath: '/usr/bin/docker'),
    hostPathVolume(mountPath: '/home/jenkins/.m2', hostPath: '/root/.m2'),
    hostPathVolume(mountPath: '/home/jenkins/dockerfile-yaml', hostPath: '/dockerfile_yaml')
  ],
)
{
  node("$label_name"){
      stage('拉取代码'){
         //checkout([$class: 'GitSCM', branches: [[name: '${Branch}']], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])
         git branch: "$Branch",credentialsId: "$git_auth", url: "$git_address"
         //sh """
         //rm -rf Jenkinsfile
         //mv Dockerfile /home/jenkins/
         //mv deploy.yaml /home/jenkins/
         //"""
      }
      stage('代码编译'){
          //sh "/opt/rh/rh-maven33/root/usr/bin/mvn clean package -Dmaven.test.skip=true"
		  sh """
		  echo "root@123" |su root -c "chown default.root /home/jenkins -R"
		  sed -i 's#defaultZone.*#${eureka_access}#g' src/main/resources/application.yml
		  sed -i 's#file: logs#file: /logs#g' src/main/resources/application.yml
		  /opt/rh/rh-maven33/root/usr/bin/mvn clean install -DskipTests
          echo build
		  """
      }
      stage('构建镜像'){
          //harbor登录
          withCredentials([usernamePassword(credentialsId: "${docker_registry_auth}", passwordVariable: 'password', usernameVariable: 'username')]) {
            sh """
              echo "root@123" |su root -c "chmod 666 /var/run/docker.sock"
			  mv target/$jar_name ./
              cp /home/jenkins/dockerfile-yaml/Dockerfile ./
			  sed -i 's#springcloud.jar#${jar_name}#g' Dockerfile
              docker build -t ${image_name} ./
              docker login -u ${username} -p '${password}' '${registry}'
              docker push ${image_name}
            """
            }
      }
      stage('部署到K8S平台'){
        //sh "sleep 3600"
        //kubernetesDeploy configs: 'deploy.yaml', kubeconfigId: "${k8s_auth}"
		//sh "mkdir /home/jenkins/.kube/"
        //sh "echo '${k8s_auth}' >/home/jenkins/.kube/config"
        sh """
        cp /home/jenkins/dockerfile-yaml/${app_name}/${project}/${app_name}1.yaml ./
        sed -i 's#\$IMAGE_NAME#${image_name}#g' ${app_name}1.yaml
        sed -i 's#\$APP_NAME#${app_name}#g' ${app_name}1.yaml
		sed -i 's#namespace: sit#namespace: ${project}#g' ${app_name}1.yaml
		cp ${app_name}1.yaml /home/jenkins/dockerfile-yaml/nacos/${project}/
		cp /home/jenkins/dockerfile-yaml/${app_name}/${project}/${app_name}2.yaml ./
        sed -i 's#\$IMAGE_NAME#${image_name}#g' ${app_name}2.yaml
        sed -i 's#\$APP_NAME#${app_name}#g' ${app_name}2.yaml
		sed -i 's#namespace: sit#namespace: ${project}#g' ${app_name}2.yaml
		cp ${app_name}2.yaml /home/jenkins/dockerfile-yaml/nacos/${project}/
        """
        //sh "kubectl apply -f /home/jenkins/dockerfile-yaml/${app_name}/${app_name}.yaml"
        kubernetesDeploy configs: "${app_name}1.yaml", kubeconfigId: "${k8s_auth}"
		kubernetesDeploy configs: "${app_name}2.yaml", kubeconfigId: "${k8s_auth}"
      }
  }
}

Dockerfile

FROM harbor.uat.testtest.com.cn/uat/java:8-jdk-alpine
COPY springcloud.jar /
ENTRYPOINT ["java","-Xms512m","-Xmx1024m","-jar","/springcloud.jar","eureka.host1=$EUREKA_HOST1","eureka.host2=$EUREKA_HOST2"]

yaml

springcloud-eureka-api1.yaml

apiVersion: v1
kind: Service
metadata:
  name: $APP_NAME-u1
  namespace: sit
spec:
  selector:
    appname: $APP_NAME1
  clusterIP: None
  ports:
  - port: 8010
    targetPort: 8010
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: $APP_NAME1
  namespace: sit
spec:
  selector:
    matchLabels:
      appname: $APP_NAME1
  template:
    metadata:
      labels:
        appname: $APP_NAME1
        app: $APP_NAME
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - $APP_NAME
            topologyKey: "kubernetes.io/hostname"
      containers:
      - name: $APP_NAME1
        image: $IMAGE_NAME
        env:
        - name: EUREKA_HOST1
          value: user:password123@springcloud-eureka-api-u1
        - name: EUREKA_HOST2
          value: user:password123@springcloud-eureka-api-u2

springcloud-eureka-api2.yaml

apiVersion: v1
kind: Service
metadata:
  name: $APP_NAME-u2
  namespace: sit
spec:
  selector:
    appname: $APP_NAME2
  clusterIP: None
  ports:
  - port: 8010
    targetPort: 8010
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: $APP_NAME2
  namespace: sit
spec:
  selector:
    matchLabels:
      appname: $APP_NAME2
  template:
    metadata:
      labels:
        appname: $APP_NAME2
        app: $APP_NAME
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - $APP_NAME
            topologyKey: "kubernetes.io/hostname"
      containers:
      - name: $APP_NAME2
        image: $IMAGE_NAME
        env:
        - name: EUREKA_HOST1
          value: user:password123@springcloud-eureka-api-u1
        - name: EUREKA_HOST2
          value: user:password123@springcloud-eureka-api-u2
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wuxingge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值