栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Jenkins在Kubernetes中持续部署

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Jenkins在Kubernetes中持续部署

Jenkins在Kubernetes中持续部署

pipeline {
    agent {
        kubernetes {
            label "jenkins-slave"
            yaml '''
apiVersion: v1
kind: Pod
metadata:
  name: jenkins-slave
spec:
  containers:
  - name: jnlp
    image: jenkins-slave-jdk:1.8
    imagePullPolicy: Never
'''
        }
    }
    stages {
        stage('TestAgent') {
            steps {
                sh 'hostname'
            }
        }

        stage('CheckOut') {
            steps {
               checkout([$class: 'GitSCM', 
               branches: [[name: '*/master']], 
               extensions: [], 
               userRemoteConfigs: [[credentialsId: 'bcfe14cb-2215-4862-a472-641f0241b573', 
               url: 'http://139.198.166.235:81/devop/devops-skywalking-service.git']]])
            }
        }
        stage('Build') {
            steps {
                script{
                    sh 'ls'
                    sh 'pwd'
                }
            }
        }

    }

}
Started by user admin
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] echo
[WARNING] label option is deprecated. To use a static pod template, use the 'inheritFrom' option.
[Pipeline] podTemplate
[Pipeline] {
[Pipeline] node
Created Pod: kubernetes ops/jenkins-slave-4l66j-8c8gs
[Normal][ops/jenkins-slave-4l66j-8c8gs][Scheduled] Successfully assigned ops/jenkins-slave-4l66j-8c8gs to node2
[Normal][ops/jenkins-slave-4l66j-8c8gs][Pulled] Container image "jenkins-slave-jdk:1.8" already present on machine
[Normal][ops/jenkins-slave-4l66j-8c8gs][Created] Created container jnlp
[Normal][ops/jenkins-slave-4l66j-8c8gs][Started] Started container jnlp
Agent jenkins-slave-4l66j-8c8gs is provisioned from template jenkins-slave-4l66j
---
apiVersion: "v1"
kind: "Pod"
metadata:
  annotations:
    buildUrl: "http://jenkins.ops/job/devops-eurka-service/1/"
    runUrl: "job/devops-eurka-service/1/"
  labels:
    jenkins: "slave"
    jenkins/label-digest: "03ddc3eddf95d5470d5c7fb6d2937abaeca3b79e"
    jenkins/label: "jenkins-slave"
  name: "jenkins-slave-4l66j-8c8gs"
spec:
  containers:
  - env:
    - name: "JENKINS_SECRET"
      value: "********"
    - name: "JENKINS_AGENT_NAME"
      value: "jenkins-slave-4l66j-8c8gs"
    - name: "JENKINS_NAME"
      value: "jenkins-slave-4l66j-8c8gs"
    - name: "JENKINS_AGENT_WORKDIR"
      value: "/home/jenkins/agent"
    - name: "JENKINS_URL"
      value: "http://jenkins.ops/"
    image: "jenkins-slave-jdk:1.8"
    imagePullPolicy: "Never"
    name: "jnlp"
    resources:
      limits: {}
      requests:
        memory: "256Mi"
        cpu: "100m"
    volumeMounts:
    - mountPath: "/home/jenkins/agent"
      name: "workspace-volume"
      readOnly: false
  nodeSelector:
    kubernetes.io/os: "linux"
  restartPolicy: "Never"
  volumes:
  - emptyDir:
      medium: ""
    name: "workspace-volume"

Running on jenkins-slave-4l66j-8c8gs in /home/jenkins/agent/workspace/devops-eurka-service
[Pipeline] {
[Pipeline] stage
[Pipeline] { (TestAgent)
[Pipeline] sh
+ hostname
jenkins-slave-4l66j-8c8gs
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (CheckOut)
[Pipeline] checkout
The recommended git tool is: NONE
using credential bcfe14cb-2215-4862-a472-641f0241b573
Cloning the remote Git repository
Cloning repository http://139.198.166.235:81/devop/devops-skywalking-service.git
 > git init /home/jenkins/agent/workspace/devops-eurka-service # timeout=10
Fetching upstream changes from http://139.198.166.235:81/devop/devops-skywalking-service.git
 > git --version # timeout=10
 > git --version # 'git version 1.8.3.1'
using GIT_ASKPASS to set credentials gitlab-devop
 > git fetch --tags --progress http://139.198.166.235:81/devop/devops-skywalking-service.git +refs/heads/*:refs/remotes/origin/* # timeout=10
Avoid second fetch
Checking out Revision 8a64bae344504217761314054e6dec360e22cc89 (refs/remotes/origin/master)
 > git config remote.origin.url http://139.198.166.235:81/devop/devops-skywalking-service.git # timeout=10
 > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
 > git config core.sparsecheckout # timeout=10
 > git checkout -f 8a64bae344504217761314054e6dec360e22cc89 # timeout=10
Commit message: "all"
First time build. Skipping changelog.
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage (hide)
[Pipeline] { (Build)
[Pipeline] script
[Pipeline] {
[Pipeline] sh
+ ls
LICENSE
README.md
basic-common
db
eureka-service
gateway-service
k8s
lombok.config
order-service
pom.xml
portal-service
product-service
stock-service
[Pipeline] sh
+ pwd
/home/jenkins/agent/workspace/devops-eurka-service
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] }
[Pipeline] // podTemplate
[Pipeline] End of Pipeline
Finished: SUCCESS
[root@master ~]# kubectl get pod -n ops -w
NAME                       READY   STATUS    RESTARTS   AGE
grafana-757fcd5f7c-fx72b   1/1     Running   15         11d
jenkins-797ccbdbc5-88qrd   1/1     Running   6          45h

jenkins-slave-mhzxx-g29pz   0/1     Pending   0          0s
jenkins-slave-mhzxx-g29pz   0/1     Pending   0          0s
jenkins-slave-mhzxx-g29pz   0/1     ContainerCreating   0          0s
jenkins-slave-mhzxx-g29pz   0/1     ContainerCreating   0          1s
jenkins-slave-mhzxx-g29pz   1/1     Running             0          2s
jenkins-slave-mhzxx-g29pz   1/1     Terminating         0          4m30s
jenkins-slave-mhzxx-g29pz   1/1     Terminating         0          4m31s
jenkins-slave-mhzxx-g29pz   0/1     Terminating         0          4m31s
jenkins-slave-mhzxx-g29pz   0/1     Terminating         0          4m39s
jenkins-slave-mhzxx-g29pz   0/1     Terminating         0          4m39s

自动部署应用(yaml):
将kubectl工具封装到Slave镜像中,并通过Config File Provider插件存储连接K8s集群的kubeconfig认证文件,然后挂载到Slave容器中,这样就能用kubectl apply deploy.yaml --kubeconfig=config

注:为提高安全性,kubeconfig文件应分配权限
除了上述方式,还可以使用Kubernetes Continuous Deploy插件,将资源配置(YAML)部署到Kubernetes,这种
不是很灵活性。

 

def project = "dev"
def app_name = "java-demo"
def image_name = "${registry}/${project}/${app_name}:${BUILD_NUMBER}"


pipeline {
    agent {
        kubernetes {
            label "jenkins-slave"
            yaml '''
apiVersion: v1
kind: Pod
metadata:
  name: jenkins-slave
spec:
  containers:
  - name: jnlp
    image: jenkins-slave-jdk:1.8
    imagePullPolicy: Never
    volumeMounts:
    - name: docker-cmd
      mountPath: /usr/bin/docker
    - name: docker-sock
      mountPath: /var/run/docker.sock
    - name: maven-cache
      mountPath: /root/.m2
  volumes:
  - name: docker-cmd
    hostPath:
      path: /usr/bin/docker
  - name: docker-sock
    hostPath:
      path: /var/run/docker.sock
  - name: maven-cache
    hostPath:
      path: /tmp/m2
'''
        }
    }
    stages {
        stage('TestAgent') {
            steps {
                sh 'hostname'
            }
        }

        stage('CheckOut') {
            steps {
               checkout([$class: 'GitSCM', 
               branches: [[name: "${branchName}"]], 
               extensions: [], 
               userRemoteConfigs: [[credentialsId: "${credentialsId}", 
               url: "${srcUrl}"]]])
            }
        }
        stage('Build') {
            steps {
                script{
                 sh """
                 mvn clean package  -Dmaven.test.skip=true
                 mvn -v
                 """
                }
            }
        }
        stage('Artifact') {
            steps {
                script{
                   withCredentials([usernamePassword(credentialsId: 'd8e0980c-1ffb-4096-a0b7-8f9379982c3f', 
                   passwordVariable: 'passwd', 
                   usernameVariable: 'user')]) {
                    sh """
                     docker build -t ${image_name} .
                     docker login -u ${user} -p ${passwd} ${registry}
                     docker push ${image_name}  
                       """ 
                   }          
                }
            }
        }
        stage('Deploy') {
            steps {
                script{
                  configFileProvider([configFile(fileId: '22bdbd6d-14f4-49c1-a924-5c844073ea69', 
                  targetLocation: "admin.kubeconfig")]){
                      sh """
                      sed -i 's#IMAGE_NAME#${image_name}#' deployment.yaml
                      sed -i 's#REPLICAS#${ReplicaCount}#' deployment.yaml
                      kubectl apply -f deployment.yaml -n ${Namespace} --kubeconfig=admin.kubeconfig
                      """
                  }        
                }
            }
        }
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/310886.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号