Jenkins
Jenkins使用主从架构来管理分布式构建。在这种体系架构中,主机和从机通过TCP/IP协议进行通信。
架构

Jenkins 主机
- 调度构建工作,将构建分派给从服务器进行实际构建
 
- 监视从机
 
- 记录并显示构建结果
 
- Jenkins的主机也可以直接执行构建
 
 
Jenkins 从机
- 配置不同的环境
 
- 侦听来自Jenkins 主机的请求
 
- Jenkins 从机可以运行在各种操作系统上
 
- Jenkins 从机的工作是执行命令,这包括执行由主机分派的构建任务
 
- 可以为项目配置执行构建的从机。
 
 
主从连接
Jenkins Slave有两种类型
- 从节点:这些是将配置为静态从节点的服务器(Windows / Linux)。这些从站将一直处于运行状态,并保持与Jenkins服务器的连接
 
- 从属云: Jenkins Cloud从属是具有动态Slave的概念。意味着,每当您触发作业时,从属将按需部署为VM /容器,并在作业完成后被删除。当您拥有庞大的Jenkins生态系统并持续构建时,此方法可节省基础设施成本。
 
Jenkinsfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
   | #!/groovy pipeline{ 	agent any
  	environment { 		REPOSITORY="https://gitee.com/MrZCoding/dop.git" 		SERVICE_DIR="user-server" 		DOCKER_REGISTRY_HOST="registry.dop.clsaa.com" 		DOCKER_REGISTRY="registry.dop.clsaa.com/dop/user-server" 	}
  	stages { 		stage('pull code') { 			steps { 				echo "start fetch code from git:${REPOSITORY}" 				deleteDir() 				git "${REPOSITORY}"                 script {                     time = sh(returnStdout: true, script: 'date "+%Y%m%d%H%M"').trim()                     git_version = sh(returnStdout: true, script: 'git log -1 --pretty=format:"%h"').trim()                     build_tag = time+git_version                 } 			} 		}
  		stage('build maven') { 			steps {                 echo "star compile"                 dir(SERVICE_DIR){                     sh "ls -l"                     sh "mvn -U -am clean package"                 } 			} 		}
  		stage('build docker') { 			steps {                 echo "start build image"                 echo "image tag : ${build_tag}"                 dir(SERVICE_DIR){                     sh "ls -l"                     sh "docker build -t ${DOCKER_REGISTRY}:${build_tag} ."                 } 			} 		}
         stage('push docker') {             steps {                 echo "start push image"                 dir(SERVICE_DIR){                   sh "ls -l"                   withCredentials([usernamePassword(credentialsId: 'docker_registry', passwordVariable: 'docker_registryPassword', usernameVariable: 'docker_registryUsername')]) {                       sh "docker login -u ${docker_registryUsername} -p ${docker_registryPassword} ${DOCKER_REGISTRY_HOST}"                       sh "docker push ${DOCKER_REGISTRY}:${build_tag}"                   }                 }             }         }
          stage('update yaml') {             steps{                 echo "start change yaml image tag"                 dir(SERVICE_DIR){                     sh "ls -l"                     sh "sed -i 's/<BUILD_TAG>/${build_tag}/' k8s.yaml"                     sh "cat k8s.yaml"                 }             }         }
  		stage('deploy') { 			steps { 				echo "start deploy" 				dir(SERVICE_DIR){ 				    sh "ls -l" 				    sh "kubectl apply -f k8s.yaml" 				} 			} 		} 	} }
   | 
 
需要深挖一下的
https://blog.windanchaos.tech/2020/03/09/jenkins%E6%9E%B6%E6%9E%84%E5%92%8C%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/