首页 > 其他分享 >k8s部署jenkins+gitlab实现代码发布

k8s部署jenkins+gitlab实现代码发布

时间:2023-10-08 09:23:41浏览次数:46  
标签:gitlab magedu echo yaml jenkins k8s data

 

1.#k8s部署jenkins
#k8s中运行jenkins服务,gitlab还是跑在物理机上,因为经常需要clone修改代码。
#基于java命令,运⾏java war包或jar包,本次以jenkins.war 包部署⽅式为例,jenkins的数据保存⾄外部存储(NFS或者PVC)。

1.1#镜像⽬录⽂件:
# pwd
/opt/k8s-data/dockerfile/magedu/jenkins
# tree
.
├── build-command.sh
├── Dockerfile
├── jenkins-2.190.1.war
└── run_jenkins.sh
0 directories, 4 files

1.2#编辑Dockerfile文件
#Jenkins Version 2.190.1
FROM harbor.magedu.net/pub-images/jdk-base:v8.212
MAINTAINER tan [email protected]
ADD jenkins-2.190.1.war /apps/jenkins/
ADD run_jenkins.sh /usr/bin/
EXPOSE 8080
CMD ["/usr/bin/run_jenkins.sh"]

1.3#编辑jenkins启动脚本
#vim run_jenkins.sh
#!/bin/bash
cd /apps/jenkins && java -server -Xms1024m -Xmx1024m -Xss512k -jar jenkins-2.190.1.war --webroot=/apps/jenkins/jenkins-data --httpPort=8080

1.4#构建Jenkins镜像:
#vim build-command.sh
#!/bin/bash
docker build -t harbor.magedu.net/magedu/jenkins:v2.190.1 .
echo "镜像制作完成,即将上传至Harbor服务器"
sleep 1
docker push harbor.magedu.net/magedu/jenkins:v2.190.1
echo "镜像上传完成"

#bash build-command.sh

1.5#验jenkins镜像
# docker run -it --rm -p 8088:8080 harbor.magedu.net/magedu/jenkins:2.190.1

1.6#创建PV/PVC:
需要两个PVC,⼀个保存jenkins的数据,⼀个保存.jenkins的数据。
#ls /opt/k8s-data/yaml/magedu/jenkins/pv
jenkins-persistentvolume.yaml
jenkins-persistentvolumeclaim.yaml

#vim jenkins-persistentvolume.yaml
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: jenkins-datadir-pv
namespace: magedu
spec:
capacity:
storage: 100Gi
accessModes:
- ReadWriteOnce
nfs:
server: 172.31.7.109
path: /data/k8sdata/magedu/jenkins-data

---
apiVersion: v1
kind: PersistentVolume
metadata:
name: jenkins-root-datadir-pv
namespace: magedu
spec:
capacity:
storage: 100Gi
accessModes:
- ReadWriteOnce
nfs:
server: 172.31.7.109
path: /data/k8sdata/magedu/jenkins-root-data

#vim jenkins-persistentvolumeclaim.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jenkins-datadir-pvc
namespace: magedu
spec:
volumeName: jenkins-datadir-pv
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 80Gi

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jenkins-root-data-pvc
namespace: magedu
spec:
volumeName: jenkins-root-datadir-pv
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 80Gi

# kubectl apply -f pv/
persistentvolume/jenkins-datadir-pv created
persistentvolume/jenkins-root-datadir-pv created
persistentvolumeclaim/jenkins-datadir-pvc created
persistentvolumeclaim/jenkins-root-data-pvc created

1.7#验证pv/pvc
# kubectl get pv -n magedu
# kubectl get pvc -n magedu

1.8#yaml文件
#pwd
/opt/k8s-data/yaml/magedu/jenkins

root@k8s-master1:/opt/k8s-data/yaml/magedu/jenkins#
tree
.
├── jenkins.yaml
└── pv
├── jenkins-persistentvolumeclaim.yaml
└── jenkins-persistentvolume.yaml
1 directory, 3 files

#vim jenkins.yaml
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
labels:
app: magedu-jenkins
name: magedu-jenkins-deployment
namespace: magedu
spec:
replicas: 1
selector:
matchLabels:
app: magedu-jenkins
template:
metadata:
labels:
app: magedu-jenkins
spec:
containers:
- name: magedu-jenkins-container
image: harbor.magedu.net/magedu/jenkins:v2.190.1
#imagePullPolicy: IfNotPresent
imagePullPolicy: Always
ports:
- containerPort: 8080
protocol: TCP
name: http
volumeMounts:
- mountPath: "/apps/jenkins/jenkins-data/"
name: jenkins-datadir-magedu
- mountPath: "/root/.jenkins"
name: jenkins-root-datadir
volumes:
- name: jenkins-datadir-magedu
persistentVolumeClaim:
claimName: jenkins-datadir-pvc
- name: jenkins-root-datadir
persistentVolumeClaim:
claimName: jenkins-root-data-pvc

---
kind: Service
apiVersion: v1
metadata:
labels:
app: magedu-jenkins
name: magedu-jenkins-service
namespace: magedu
spec:
type: NodePort
ports:
- name: http
port: 80
protocol: TCP
targetPort: 8080
nodePort: 38080
selector:
app: magedu-jenkins

1.9#运行jenkins服务
# pwd
/opt/k8s-data/yaml/magedu/jenkins
# kubectl apply -f jenkins.yaml
deployment.extensions/magedu-jenkins-deployment
created
service/magedu-jenkins-service created

1.10#验证pod:
# kubectl get pods -n magedu
# kubectl describe pods magedu-jenkins-deployment-74c4b55576-ssxdv -n magedu

1.11#验证web访问jenkins:
http://192.168.7.110:38080

1.12#创建构建任务
参考我的博客:https://www.cnblogs.com/tanll/p/16655966.html

1.13#脚本内容
#!/bin/bash

#记录脚本开始执行时间
starttime=`date +'%Y-%m-%d %H:%M:%S'`

#变量
SHELL_DIR="/root/scripts"
SHELL_NAME="$0"
K8S_CONTROLLER1="172.31.7.101"
K8S_CONTROLLER2="172.31.7.102"
DATE=`date +%Y-%m-%d_%H_%M_%S`
METHOD=$1
Branch=$2

if test -z $Branch;then
Branch=develop
fi


function Code_Clone(){
Git_URL="[email protected]:magedu/app1.git"
DIR_NAME=`echo ${Git_URL} |awk -F "/" '{print $2}' | awk -F "." '{print $1}'`
DATA_DIR="/data/gitdata/magedu"
Git_Dir="${DATA_DIR}/${DIR_NAME}"
cd ${DATA_DIR} && echo "即将清空上一版本代码并获取当前分支最新代码" && sleep 1 && rm -rf ${DIR_NAME}
echo "即将开始从分支${Branch} 获取代码" && sleep 1
git clone -b ${Branch} ${Git_URL}
echo "分支${Branch} 克隆完成,即将进行代码编译!" && sleep 1
#cd ${Git_Dir} && mvn clean package
#echo "代码编译完成,即将开始将IP地址等信息替换为测试环境"
#####################################################
sleep 1
cd ${Git_Dir}
tar czf ${DIR_NAME}.tar.gz ./*
}

#将打包好的压缩文件拷贝到k8s 控制端服务器
function Copy_File(){
echo "压缩文件打包完成,即将拷贝到k8s 控制端服务器${K8S_CONTROLLER1}" && sleep 1
scp ${Git_Dir}/${DIR_NAME}.tar.gz root@${K8S_CONTROLLER1}:/opt/k8s-data/dockerfile/linux43/tomcat-app1/
echo "压缩文件拷贝完成,服务器${K8S_CONTROLLER1}即将开始制作Docker 镜像!" && sleep 1
}

#到控制端执行脚本制作并上传镜像
function Make_Image(){
echo "开始制作Docker镜像并上传到Harbor服务器" && sleep 1
ssh root@${K8S_CONTROLLER1} "cd /opt/k8s-data/dockerfile/linux43/tomcat-app1 && bash build-command.sh ${DATE}"
echo "Docker镜像制作完成并已经上传到harbor服务器" && sleep 1
}

#到控制端更新k8s yaml文件中的镜像版本号,从而保持yaml文件中的镜像版本号和k8s中版本号一致
function Update_k8s_yaml(){
echo "即将更新k8s yaml文件中镜像版本" && sleep 1
ssh root@${K8S_CONTROLLER1} "cd /opt/k8s-data/yaml/linux43/tomcat-app1 && sed -i 's/image: harbor.magedu.*/image: harbor.magedu.net\/linux43\/tomcat-app1:${DATE}/g' tomcat-app1.yaml"
echo "k8s yaml文件镜像版本更新完成,即将开始更新容器中镜像版本" && sleep 1
}

#到控制端更新k8s中容器的版本号,有两种更新办法,一是指定镜像版本更新,二是apply执行修改过的yaml文件
function Update_k8s_container(){
#第一种方法
ssh root@${K8S_CONTROLLER1} "kubectl set image deployment/linux43-tomcat-app1-deployment linux43-tomcat-app1-container=harbor.magedu.net/linux43/tomcat-app1:${DATE} -n linux43"
#第二种方法,推荐使用第一种
#ssh root@${K8S_CONTROLLER1} "cd /opt/k8s-data/yaml/linux43/tomcat-app1 && kubectl apply -f tomcat-app1.yaml --record=true"
echo "k8s 镜像更新完成" && sleep 1
echo "当前业务镜像版本: harbor.magedu.net/linux43/tomcat-app1:${DATE}"
#计算脚本累计执行时间,如果不需要的话可以去掉下面四行
endtime=`date +'%Y-%m-%d %H:%M:%S'`
start_seconds=$(date --date="$starttime" +%s);
end_seconds=$(date --date="$endtime" +%s);
echo "本次业务镜像更新总计耗时:"$((end_seconds-start_seconds))"s"
}

#基于k8s 内置版本管理回滚到上一个版本
function rollback_last_version(){
echo "即将回滚之上一个版本"
ssh root@${K8S_CONTROLLER1} "kubectl rollout undo deployment/linux43-tomcat-app1-deployment -n linux43"
sleep 1
echo "已执行回滚至上一个版本"
}

#使用帮助
usage(){
echo "部署使用方法为 ${SHELL_DIR}/${SHELL_NAME} deploy "
echo "回滚到上一版本使用方法为 ${SHELL_DIR}/${SHELL_NAME} rollback_last_version"
}

#主函数
main(){
case ${METHOD} in
deploy)
Code_Clone;
Copy_File;
Make_Image;
Update_k8s_yaml;
Update_k8s_container;
;;
rollback_last_version)
rollback_last_version;
;;
*)
usage;
esac;
}

main $1 $2

标签:gitlab,magedu,echo,yaml,jenkins,k8s,data
From: https://www.cnblogs.com/tanll/p/17748045.html

相关文章

  • CentOS环境:离线安装配置gitlab(适用于内网环境)
    前言:  此篇是为了完结真实的物理隔离环境下、验证yum缓存的文件包安装配置是否成功,对上篇在线安装文章的补充。1.互联网电脑环境准备1.1电脑环境配置信息IP:192.168.31.164OS:CentOSLinuxrelease7.9.2009(Core)1.2清除yum的rpm包缓存数据包清除前的数据记录:[root@bdlab......
  • Gitlab管理员忘记密码
    目录Gitlab管理员忘记密码一、背景二、邮箱方式找回1.在gitlab登录窗口2.输入邮箱账号找回3.重设密码三、Bash命令方式找回1.切换到git用户2.查看gitlab命令文件3.进入gitlab控制台4.查询gitlab超级管理员信息4.重置密码并报存用户对象5.返回gitlab登录界面重新登录Gitlab管理员......
  • 部署k8s dashboard
    一、Kubernetesdashboard作用通过dashboard能够直观了解Kubernetes集群中运行的资源对象通过dashboard可以直接管理(创建、删除、重启等操作)资源对象二、获取Kubernetesdashboard资源清单文件kubectl部署https://github.com/kubernetes/dashboard/releaseskubectlapply......
  • gitlab如何快速拉取项目到本地?
      拉取git项目到本地只需要6步:  1、查看本地的rsa。  指令:cat~/.ssh/id_rsa.pub  2、复制结果输入以上指令会出现以下结果  3、git搜索SSH,找到SSHKey,添加新的key  4、找到新的文件夹,gitbashhere  5、克隆对应项目ssh  6、回到Bash输入gitc......
  • 银河麒麟安装GitLab
    一、下载wgethttps://packages.gitlab.cn/repository/el/8/gitlab-jh-16.2.4-jh.0.el8.aarch64.rpm二、安装报错缺少依赖,需要安装atmic[root@ky10sp2-wnc-test03soft]#rpm-ivhgitlab-jh-16.2.4-jh.0.el8.aarch64.rpmwarning:gitlab-jh-16.2.4-jh.0.el8.aarch64.rpm:Header......
  • 02 kubeadm部署k8s
    文章目录KubeAdmin安装k8s1、集群类型2、安装方式一、准备环境1、部署软件、系统要求2、节点规划二、kubeadm安装k8s1、内核优化脚本(所有机器)2、免密脚本(所有机器)3、安装IPVS和内核优化(所有机器)4、安装Docker(所有机器)5、安装kubernetes(所有机器)6、m01主节点初始化配置1......
  • Gitlab upgrade paths
    UpgradepathsUpgradingacrossmultipleGitLabversionsinonegois onlypossiblebyacceptingdowntime.Ifyoudon’twantanydowntime,readhowto upgradewithzerodowntime.Foradynamicviewofexamplesofsupportedupgradepaths,trythe UpgradePa......
  • k8s之集群部署(kubeadm)
     [master&node]1.修改主机名hostnamectlset-hostnamemaster-01cat>>/etc/hosts<<EOF172.28.32.1master-01172.28.32.2worker-01EOF 2.配置阿里云官方源mkdir-p/etc/yum.repos.d/backfind/etc/yum.repos.d/-typef-execmv{}/etc/yum.rep......
  • 离线安装Kubernetes(K8s)方法
    1简述1.1搭建方法介绍 K8s有两种搭建方式:1.使用K8s官方发布的二进制包搭建环境2.使用Kubeadm搭建(推荐该种方式) 本文的K8s搭建流程均基于Kubeadm方式1.2Kubeadm简介 Kubeadm是一款旨在为创建Kubernetes集群提供最佳实践“快速路径”的工具。它执行必要的操作,以用户......
  • 基于 K8S 搭建自己的 ELK 服务
    基于K8S(K3S)搭建自己的ELK服务对应的Yaml资源在https://github.com/nicelizhi/k8s-elkelasticsearch服务Servicekind:ServiceapiVersion:v1metadata:name:elasticsearchspec:ports:-name:elasticsearchprotocol:TCPport:9200......