jenkins通过流水线自动部署项目(k8s部署)
参考:生成器。
参考:https://www.cnblogs.com/rb2010/p/16195443.html
https://blog.csdn.net/qq_43470725/article/details/135345309
我的 账号:admin 密码123456
jenkins插件清华镜像:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
docker 拉取镜像到本地:
版本号要下载和插件相对应的,最好是最新的版本。可以去官网看最新的版本是哪个:
https://www.jenkins.io/download/
docker pull docker.io/jenkins/jenkins:2.440
使用命令查看已经下载好的镜像:
docker images
配置端口:

配置资源限制!
这里一定要配置资源限制,要不然用maven打包时,会一直oom的
配置卷挂载:使用nfs
配置NFS服务器
安装nfs
yum install -y rpcbind nfs-utils
编辑文件:
vim /etc/exports
写入:
/root/nfs_root/ *(insecure,rw,sync,no_root_squash)
执行以下命令,启动 nfs 服务
# 创建共享目录,如果要使用自己的目录,请替换本文档中所有的 /root/nfs_root/
mkdir /root/nfs_root
systemctl enable rpcbind
systemctl enable nfs-server
systemctl start rpcbind
systemctl start nfs-server
exportfs -r
检查配置是否生效
exportfs
在客户端测试nfs
yum install -y nfs-utils
执行以下命令检查 nfs 服务器端是否有设置共享目录
# showmount -e $(nfs服务器的IP)
showmount -e 172.17.216.82
# 输出结果如下所示
Export list for 172.17.216.82:
/root/nfs_root *
输出结果如下所示
/root/nfs_root /root/nfs_root

注意卷挂载这里要讲nfs服务器上准备的文件权限设为可使用的才行!
chmod 777 jenkins

要能安装插件,访问外网,还需要配置dns,和主机相关设置,将hostNetwork设置为true

参考:https://blog.csdn.net/justlpf/article/details/132233455

nfs卷挂载初始化的密码文件要在nfs服务器上才能找的到:
/root/nfs_root/jenkins/secrets

配置jdk和maven:jdk是jenkins自己会带有的,可以直接搜索看到本容器的jdk的位置:
java -version
find / -name "openjdk"

然后在网上下载好maven包,然后将它放在jenkins_home的挂载路径下去:
记得修改settings文件,添加阿里镜像
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
k8s部署jenkins时,虚拟内存不足的情况出现:

新增虚拟内存
开启虚拟内存:https://my.oschina.net/u/2306127/blog/657269
1、查看内存使用情况
free -m

虚拟空间为0
2、创建虚拟内存磁盘卷
# 大概count=2024288,2G左右,可以视磁盘大小和需求创建。
# 默认存放在/swap/swapadd,可以是自己的任何目录。阿里云服务器默认没有swap,需要自己mkdir /swap创建。
dd if=/dev/zero of=/swapadd bs=1024 count=2024288
3、将磁盘卷转为虚拟内存卷
mkswap /swapadd
4、启用虚拟内存服务
swapon /swapadd
5、再来查看内存使用情况
free -m

6、关闭虚拟内存服务
swapoff -v /swapadd
7、移动虚拟内存空间
如果当前的虚存所在的磁盘空间不够,可以首先关闭虚存服务,将其移动到别的磁盘,再启用即可。
swapoff -v /swapadd
mv /swapadd /mnt/swap
swapon /swapadd
在输出编译日志的时候,能看到maven执行的jar保存的地址在哪里:
/var/jenkins_home/workspace/my_test/gencell-test/target/gencell-test.jar
能正常编译成功打包然后看见你的shell输出基本的环境就搭建好了,接下来就可以编写流水线了!
pipeline生成器
两个关键命令:
1、通过yaml生成pod
kubectl apply -f ./gencell-test.yaml
直接复制可能会有下面的这些冲突,删除掉就好了:
参考:
https://stackoverflow.com/questions/51297136
creationTimestamp:
resourceVersion:
selfLink:
uid:
kubectl rollout restart deployment <deployment_name> -n <namespace>
2、滚动部署命名空间为default的gencell-test
kubectl rollout restart deployment gencell-test -n default
借助piple片段生成器生成piple脚本:
安装k8s插件 :名称通常是 “Kubernetes Continuous Deploy” 或 “Kubernetes”
安装 kubernetes cli 插件,否则会报错


jenkins使用kubectl
使用Jenkins容器时,是访问不到kubectl命令的和其相关的文件,可以将这个kubectl和相关的文件都复制到挂载的文件夹下面去!
rsync -av kubectl root@hadoop102:/root/nfs_root/jenkins/k8s/
rsync -av k8s-yml/ root@hadoop102:/root/nfs_root/jenkins/k8s/


复制成功!
pipeline脚本:
pipeline {
agent any
tools {
maven 'maven'
}
environment {
APP_PROFILE='dev'
}
stages {
stage('拉取代码') {
steps {
echo '拉取代码开始!'
git credentialsId: '1a3fae19-50bd-47fd-99cc-f88ef90c04d5', url: 'https://gitee.com/deng-chaosheng/gencell.git'
echo '拉取代码完毕!'
}
}
stage('构建代码') {
steps {
echo '构建代码开始!'
sh 'mvn clean package -Dfile.encoding=UTF-8 -DskipTests=true'
echo '构建代码成功!'
}
}
stage('部署代码') {
steps {
echo "===========================应用部署配置==========================="
withKubeConfig(caCertificate: '', clusterName: '', contextName: '', credentialsId: 'k8s', namespace: '', restrictKubeConfigAccess: false, serverUrl: 'https://192.168.10.103:6443') {
sh '/var/jenkins_home/k8s/kubectl version'
sh '/var/jenkins_home/k8s/kubectl apply -f /var/jenkins_home/k8s/gencell-test.yaml'
}
}
}
}
}
maven运行很吃内存,如果是虚拟机运行,还用pod的话,可能直接就OOM了,所以介意配置jenkins的容器要给大点内存容量才行,再运行!
想在jenkins中运行docker的挂载配置:
参考:https://blog.csdn.net/weixin_42763696/article/details/134499562
将/usr/bin/docker (这里是为了为jenkins容器能调用host主机的docker所做的映射)
和/var/run/docker.sock(此映射卷主要用于执行docker镜像内的docker命令执行 共享当前docker的状态)
都挂载到容器中就可以了
注意要在对应的服务器上安装docker,并且将docker-sock设置为任何用户可操作的权限!
当不指定类型的时候就选择EmptyString
下面来使用脚本文件进行自动化流水线部署!
更多推荐



所有评论(0)