jenkins与k8s的对接有多种方法:
jenkins与k8s的插件对接说明
使用clouds插件对接
在jenkins执行构建时,k8s上会运行一个jnlp节点,本质上是一种jenkins主从架构的slave节点
jnlp节点通过调用k8s的API,在k8s中创建资源
这种方法比较复杂,因为很多时候jnlp镜像都是需要自己装docker、maven和jdk环境的,还要调整jenkins的设置
jenkins与k8s的脚本对接说明
在k8s的master节点上创建jenkins的工作目录,将其作为jenkins-slave使用,写入脚本创建资源
流程说明:
添加jenkins-slave→git checkout→maven→docker build and push→k8s拉取images→创建资源文件→创建资源
pipeline脚本
我这里的环境和上一篇《jenkins构建pipeline项目到docker》一致,代码同样是用的hellowolrd的一个项目
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 82 83 84
| node ("k8s-master") { stage('git checkout') { git branch: 'main', credentialsId: '3ecfd94e-fbba-458e-b3f6-4a65f5762751', url: 'http://gitlab.wangsheng.com/group01/java_discuz.git' } stage('maven build') { sh '''export JAVA_HOME=/usr/java/jdk-11 /usr/local/maven/bin/mvn clean package -Dmaven.test.skip=true''' } stage('build and push images') { sh '''docker pull 192.168.10.130/jenkins-demo/tomcat8:v1 cat > Dockerfile << EOF FROM 192.168.10.130/jenkins-demo/tomcat8:v1 RUN rm -rf /usr/local/tomcat8/webapps/* && mkdir /usr/local/tomcat8/webapps/ROOT ADD webapp/target/webapp.war /usr/local/tomcat8/webapps/hello-world.war EOF docker build -t 192.168.10.130/jenkins-demo/tomcat8-demo:latest . docker push 192.168.10.130/jenkins-demo/tomcat8-demo:latest ''' } stage('镜像测试') { sh '''docker rm -f jenkins-test | true''' sh '''docker run -itd -p 8081:8080 --name jenkins-test 192.168.10.130/jenkins-demo/tomcat8-demo:latest /bin/bash''' sh '''docker ps | grep -i -w -q jenkins-test && echo "deploy successfully"''' sh '''docker rm -f jenkins-test''' } stage('传送镜像') { sh '''docker save -o tomcat.tar.gz 192.168.10.130/jenkins-demo/tomcat8-demo:latest scp tomcat.tar.gz ws-k8s-node1:/root/ ssh ws-k8s-node1 "ctr -n=k8s.io image import tomcat.tar.gz"''' } stage('dp资源文件') { sh '''cat > deployment.yaml<<EOF --- apiVersion: apps/v1 kind: Deployment metadata: name: tomcat-dp namespace: default labels: app: tomcat spec: replicas: 1 selector: matchLabels: app: test template: metadata: name: tomcat-test labels: app: test spec: nodeName: ws-k8s-node1 containers: - name: tomcat-dp1 image: 192.168.10.130/jenkins-demo/tomcat8-demo:latest imagePullPolicy: IfNotPresent --- apiVersion: v1 kind: Service metadata: name: tomcat-service spec: type: NodePort ports: - port: 80 protocol: TCP targetPort: 8080 nodePort: 30080 selector: app: test EOF ''' sh '''kubectl delete deployments.apps tomcat-dp| true''' sh '''kubectl apply -f deployment.yaml && echo "deploy sucessful" ''' } stage('页面测试') { sh '''HTTP_CODE=$(curl -o /dev/null -s -w "%{http_code}\n" 192.168.10.131:30080/hello-world) if [[ $HTTP_CODE =~ ^(200|301|302)$ ]];then echo "operational testing sucessfully" else echo "operational testing failed" fi ''' } }
|
