k8s集群部署jenkins,通过jenkinsslave自动化部署pod,已经成为了趋势
接下来我们部署一下,完全放到生产环境部署,
首先部署gitlab,参考我的这个文档:
https://blog.51cto.com/xiaorenwutest/2139031

=======================================
jenkins的部署我已经放到了百度盘,可以下载哈
链接:https://pan.baidu.com/s/1Q-gHanTMk5u1WsdSGSPNVw
提取码:rvso

接下来部署一下

kubectl create namespace kube-ops

kubectl create -f pvc.yaml
kubectl create -f rbac.yaml
kubectl create -f jenkins2.yaml
这里会显示没有权限,需要给目录创建一下权限
chown -R 1000 /data/k8s/jenkins2
删掉pod在创建
kubectl delete -f jenkins.yaml
kubectl create -f jenkins.yaml
k8s+动态jenkins+gitlab实现自动化流水【17】
k8s+动态jenkins+gitlab实现自动化流水【17】
说明已经创建好了
url打开一下
接下来开始安装插件
k8s+动态jenkins+gitlab实现自动化流水【17】_第1张图片
Kubernetes Continuous Deploy、
Kubernetes、
Gitlab Hook 、
GitLab、
Build Authorization Token
安装完成之后可以系统配置

k8s+动态jenkins+gitlab实现自动化流水【17】_第2张图片
k8s+动态jenkins+gitlab实现自动化流水【17】_第3张图片
测试说明jenkins可以连接到k8s集群
k8s+动态jenkins+gitlab实现自动化流水【17】
:http://jenkins2.kube-ops.svc.cluster.local:8080,这里的格式为:服务名.namespace.svc.cluster.local:8080,根据上面创建的jenkins 的服务名填写,如果是用上面我们创建的就应该是jenkins2

在创建pod,动态的jenkins-slave
k8s+动态jenkins+gitlab实现自动化流水【17】_第4张图片
挂载两个主机目录
k8s+动态jenkins+gitlab实现自动化流水【17】_第5张图片

k8s+动态jenkins+gitlab实现自动化流水【17】_第6张图片

================================================
完成之后测试创建一下

k8s+动态jenkins+gitlab实现自动化流水【17】_第7张图片

k8s+动态jenkins+gitlab实现自动化流水【17】_第8张图片
echo "测试 Kubernetes 动态生成 jenkins slave"
echo "==============docker in docker==========="
docker info

echo "=============kubectl============="
kubectl get pods
k8s+动态jenkins+gitlab实现自动化流水【17】_第9张图片
k8s+动态jenkins+gitlab实现自动化流水【17】
jenkins-slave启动了
k8s+动态jenkins+gitlab实现自动化流水【17】_第10张图片
k8s+动态jenkins+gitlab实现自动化流水【17】_第11张图片

说明已经成功了,接下来配置项目

Jenkins Pipeline 介绍:
要实现在 Jenkins 中的构建工作,可以有多种方式,我们这里采用比较常用的 Pipeline 这种方式。Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作。

=====================================
Jenkins Pipeline 有几个核心概念:

Node:节点,一个 Node 就是一个 Jenkins 节点,Master 或者 Agent,是执行 Step 的具体运行环境,比如我们之前动态运行的 Jenkins Slave 就是一个 Node 节点
Stage:阶段,一个 Pipeline 可以划分为若干个 Stage,每个 Stage 代表一组操作,比如:Build、Test、Deploy,Stage 是一个逻辑分组的概念,可以跨多个 Node
Step:步骤,Step 是最基本的操作单元,可以是打印一句话,也可以是构建一个 Docker 镜像,由各类 Jenkins 插件提供,比如命令:sh 'make',就相当于我们平时 shell 终端中执行 make 命令一样。

创建一个简单的 Pipeline

node {
stage('Clone') {
echo "1.Clone Stage"
}
stage('Test') {
echo "2.Test Stage"
}
stage('Build') {
echo "3.Build Stage"
}
stage('Deploy') {
echo "4. Deploy Stage"
}
}
k8s+动态jenkins+gitlab实现自动化流水【17】_第12张图片

部署 Kubernetes 应用
接下来创建一个完整的项目

首先我们要编写一个dockerfile然后上传到gitlab上面
k8s+动态jenkins+gitlab实现自动化流水【17】_第13张图片

我们已经上传了
上传命令
k8s+动态jenkins+gitlab实现自动化流水【17】

k8s+动态jenkins+gitlab实现自动化流水【17】_第14张图片

k8s+动态jenkins+gitlab实现自动化流水【17】_第15张图片
开始配置

如下
k8s+动态jenkins+gitlab实现自动化流水【17】_第16张图片

k8s+动态jenkins+gitlab实现自动化流水【17】_第17张图片

描述随便写

k8s+动态jenkins+gitlab实现自动化流水【17】_第18张图片

这里需要安装Pipeline插件哈,
上图圈红的需要配置一下

k8s+动态jenkins+gitlab实现自动化流水【17】_第19张图片

这样生成的
前提需要配置一个gitlab的账号密码

k8s+动态jenkins+gitlab实现自动化流水【17】_第20张图片

k8s+动态jenkins+gitlab实现自动化流水【17】_第21张图片

k8s+动态jenkins+gitlab实现自动化流水【17】_第22张图片

好了,接下来讲解一下我们的pip的语法当中都有哪些

k8s+动态jenkins+gitlab实现自动化流水【17】_第23张图片

k8s+动态jenkins+gitlab实现自动化流水【17】_第24张图片

k8s+动态jenkins+gitlab实现自动化流水【17】_第25张图片

k8s+动态jenkins+gitlab实现自动化流水【17】_第26张图片

k8s+动态jenkins+gitlab实现自动化流水【17】_第27张图片

node('haimaxy-jnlp') {
stage('Clone git拉取代码') {
echo "1.Clone Stage"
git credentialsId: 'gitlab', url: 'http://10.20.2.29/root/nginx.git'
}
stage('Test') {
echo "2.Test Stage"
}
stage('Build镜像') {
echo "3.Build Docker Image Stage"
sh "docker build -t 10.20.2.116/cnych/jenkins-demo:${build_tag} ."
}
stage('Push镜像到Harbor仓库') {
echo "4.Push Docker Image Stage"
sh "docker login http://10.20.2.116 -u admin -p Harbor12345"
sh "docker push 10.20.2.116/cnych/jenkins-demo:${build_tag}"
}
stage('Deploy部署部署pod') {
echo "5. Deploy Stage"
def userInput = input(
id: 'userInput',
message: 'Choose a deploy environment',
parameters: [
[
$class: 'ChoiceParameterDefinition',
choices: "Dev\nQA\nProd",
name: 'Env'
]
]
)
echo "This is a deploy step to ${userInput}"
sh "sed -i 's//${build_tag}/' nginx.yaml"
if (userInput == "Dev") {
// deploy dev stuff
} else if (userInput == "QA"){
// deploy qa stuff
} else {
// deploy prod stuff
}
sh "kubectl apply -f nginx.yaml"
}
}

完成之后我们创建一下

k8s+动态jenkins+gitlab实现自动化流水【17】_第28张图片

k8s+动态jenkins+gitlab实现自动化流水【17】_第29张图片

k8s+动态jenkins+gitlab实现自动化流水【17】_第30张图片

部署完成了,我们来机器上看一下

k8s+动态jenkins+gitlab实现自动化流水【17】_第31张图片

已经成功部署了,去harbor看一下镜像仓库

这里标签需要注意一下

k8s+动态jenkins+gitlab实现自动化流水【17】

k8s+动态jenkins+gitlab实现自动化流水【17】_第32张图片

说明我们已经部署流水线成功了

今天先到这里,后面有问题可以留言和反馈