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


docker push ${imageName}
''''''
}
}
}

  • 尽量多使用k8s和Dcoker
例如我们要创建一个应用程序的镜像 , 我们可以写一个Docker文件 , 并在Jenkins脚本里调用这个Docker文件来创建 , 也可以写一个Jenkins脚本 , 在脚本里来创建镜像 。 比较好的方法是前者 。 因为Docker和k8s都是事实上的标准 , 移植起来很方便 。
  • Jenkins脚本的代码越少越好
如果你认同前面两个原则 , 那么这一条就是顺理成章的 , 原因也和上面是一样的 。
  • 常见问题:
1.变量要放在双引号里
Jenkins的脚本即可以使用单引号也可以使用双引号 , 但如果你在引号里引用了变量 , 那么就要使用双引号 。
正确的命令:
sh ''kubectl apply -f ${WORKSPACE}${kubBackendDirectory}/backend-deployment.yaml''
错误的命令:
sh 'kubectl apply -f ${WORKSPACE}${kubBackendDirectory}/backend-deployment.yaml'2.docker not found
如果Jenkins的容器里没有Docker , 但你又调用了Docker命令 , 那么“Console Output”里就会有如下错误:
docker inspect -f . k8sdemo-backend:latest
/var/jenkins_home/workspace/k8sdec@2@tmp/durable-01e26997/script.sh: 1: /var/jenkins_home/workspace/k8sdec@2@tmp/durable-01e26997/script.sh: docker: not found
3.Jenkins宕机了
在调试Jenkins时 , 我新创建了一个镜像文件并上传到“Docker hub”之后就发现Jenkins宕机了 。 检查了Pod , 发现了问题 , k8s找不到Jenkins的镜像文件了(镜像文件从磁盘上消失了) 。 因为Jenkins的部署文件的设置是“imagePullPolicy: Never” , 所以一旦镜像没有了 , 它不会自动重新下载 。 后来找到了原因 , Vagrant的默认磁盘大小是10G , 如果空间不够 , 它会自动从磁盘上删除其他镜像文件 , 腾出空间 , 结果就把Jenkins的镜像文件给删了 , 解决方案是扩充Vagrant的磁盘大小 。
下面是修改之后的Vagrantfile , 把磁盘空间改成了16G 。
Vagrant.configure(2) do |config|
。。。
config.vm.box = ''ubuntu/xenial64''
config.disksize.size = '16GB'
。。。
end
详情请见How can I increase disk size on a Vagrant VM?
https://askubuntu.com/questions/317338/how-can-i-increase-disk-size-on-a-vagrant-vm
##初探在容器上构建持续部署
本文插图
源码
完整源码的github链接:https://github.com/jfeng45/k8sdemo
下面是项目中与本文有关的部分:
##初探在容器上构建持续部署
本文插图
附录:
下面是Jenkins项目运行后的完整的“Console Output”:
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] podTemplate
[Pipeline] {
[Pipeline] node
Still waiting to schedule task
‘k8sdemopod-030ed100-cb28-4770-b6de-c491970e5baa-twb8s-k9pn3’ is offline
Agent k8sdemopod-030ed100-cb28-4770-b6de-c491970e5baa-twb8s-k9pn3 is provisioned from template Kubernetes Pod Template
Agent specification [Kubernetes Pod Template] (k8sdemopod-030ed100-cb28-4770-b6de-c491970e5baa):
* [modified-jenkins] jfeng45/modified-jenkins:1.0
Running on k8sdemopod-030ed100-cb28-4770-b6de-c491970e5baa-twb8s-k9pn3 in /home/jenkins/workspace/jenkins-k8sdemo