##初探在容器上构建持续部署( 五 )


##初探在容器上构建持续部署
本文插图
检验结果
现在Jenkins的项目就完全配置好了 , 需要运行项目 , 检验结果 。 启动项目后 ,
查看“Console Output” , 下面是部分输出(全部输出太长 , 请看附录) , 说明部署成功 。
。。。
kubectl apply -f /home/jenkins/workspace/test1/script/kubernetes/backend/backend-deployment.yaml
deployment.apps/k8sdemo-backend-deployment created
[Pipeline] sh kubectl apply -f /home/jenkins/workspace/test1/script/kubernetes/backend/backend-service.yaml
service/k8sdemo-backend-service created
[Pipeline] }
[Pipeline] // container
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] }
[Pipeline] // podTemplate
[Pipeline] End of Pipeline
Finished: SUCCESS
查看运行结果:
获得Pod名字:
vagrant@ubuntu-xenial:/home$ kubectl get pod
NAME READY STATUS RESTARTS AGE
envar-demo 1/1 Running 15 32d
k8sdemo-backend-deployment-6b99dc6b8c-8kxt9 1/1 Running 0 50s
k8sdemo-database-deployment-578fc88c88-mm6x8 1/1 Running 9 20d
k8sdemo-jenkins-deployment-675dd574cb-r57sb 1/1 Running 0 2d23h
登录Pod并运行程序:
vagrant@ubuntu-xenial:/home$ kubectl exec -ti k8sdemo-backend-deployment-6b99dc6b8c-8kxt9 -- /bin/sh
~ # ./main.exe
DEBU[0000] connect to database
DEBU[0000] dataSourceName:dbuser:dbuser@tcp(k8sdemo-database-service:3306)/service_config?charset=utf8
DEBU[0000] FindAll
DEBU[0000] created=2019-10-21
DEBU[0000] find user:{1 Tony IT 2019-10-21}
DEBU[0000] find user list:[{1 Tony IT 2019-10-21}]
DEBU[0000] user lst:[{1 Tony IT 2019-10-21}]
结果正确 。
##初探在容器上构建持续部署
本文插图
Jenkins原理
实例部分已经结束 , 下面来探讨最佳实践 。 在这之前 , 先要搞清楚Jenkins的原理 。

  • 可执行命令
我一直有一个问题就是那些命令是Jenkins可以通过shell执行的?Jenkins和Docker、k8s不同 , 后者有自己的一套命令 , 只要把它们学会了就行了 。 而Jenkins是通过与别的系统集成来工作的 , 因此它的可执行命令与其他系统有关 , 这导致了你很难知道那些命令是可以执行的 , 那些不行 。 你需要弄懂它的原理 , 才能得到答案 。 当Jenkins执行脚本时 , 主节点会自动生成一个子节点(Docker容器) , 所有的Jenkins命令都是在这个容器里执行的 。 所以能执行的命令与容器密切相关 。 一般来讲 , 你可以通过shell来运行Linux命令 。 那下面的问题就来了:
1、为什么我不能用Bash?
因为你使用的子节点的容器可能使用的是精简版的Linux , 例如Alpine , 它是没有Bash的 。
2、为什么我不能运行Docker命令或Kubectl?
因为它的默认容器是jenkinsci/jnlp-slave , 而它里面没有预装Docker或kubectl 。 你可以不使用默认容器 , 而是指定你自己的容器 , 并在其中预装上述软件 , 那么就可以执行这些命令了 。
  • 如何共享文件
一个Jenkins项目通常要分成几个步骤(stage)来完成 , 例如你下载的源码要在几个步骤之间共享 , 那怎么共享呢?Jenkins为每个项目分配了一个WORKSPACE(磁盘空间), 里面存储了所有从源码库和其他地方下载的文件 , 不同stage之间可以通过WORKSPACE来共享文件 。


推荐阅读