8、创建pipeline
8.1、创建测试pipeline任务
在我们安装完pipeline插件后,就可以创建流水线项目了。接下来我们就来添加一个 Job 任务,看是否能够在 Slave Pod 中执行,任务执行完成后看 Pod 是否会被销毁。
在 Jenkins 首页点击create new jobs,创建一个测试的任务,输入任务名称,然后我们选择 Freestyle project 类型的任务。
注意在上面的 Label Expression,就是前面我们配置的 Slave Pod 中的 Label,这两个地方必须保持一致,我这里没有填,点击空格,自动选择标签名。
在Build区域选择“Exscute shell”然后输入我们测试命令。
echo "测试 Kubernetes 动态生成 jenkins slave"
echo "==============docker in docker==========="
docker info
echo "=============kubectl============="
kubectl get pods
配置完毕后,现在我们直接在页面点击做成的 Build now 触发构建即可,然后观察 Kubernetes 集群中 Pod 的变化。
在配置完成后发现启动 Jenkins Slave Pod 的时候,出现 Slave Pod 连接不上,重复创建Slave Pod,然后销毁,无限循环,项目一直pedding。
如果出现上面这种情况的话就需要将 Slave Pod 中的运行命令和参数两个值给清空掉
8.2、部署 Kubernetes 应用
8.2.1、部署流程
上面我们已经知道了如何在 Jenkins Slave 中构建任务了,那么如何来部署一个原生的 Kubernetes 应用呢? 要部署 Kubernetes 应用,我们就得对我们之前部署应用的流程要非常熟悉才行,我们之前的流程是怎样的:
编写代码
测试
编写 Dockerfile
构建打包 Docker 镜像
推送 Docker 镜像到仓库
编写 Kubernetes YAML 文件
更改 YAML 文件中 Docker 镜像 TAG
利用 kubectl 工具部署应用
我们之前在 Kubernetes 环境中部署一个原生应用的流程应该基本上是上面这些流程,现在我们就需要把上面这些流程放入 Jenkins 中来自动帮我们完成,从测试到更新 YAML 文件属于 CI 流程,后面部署属于 CD 的流程。如果按照我们上面的示例,我们现在要来编写一个 Pipeline 的脚本,应该怎么编写呢?
node('jenkins-builder') {
stage('Clone') {
echo "1.Clone Stage"
}
stage('Test') {
echo "2.Test Stage"
}
stage('Build') {
echo "3.Build Docker Image Stage"
}
stage('Push') {
echo "4.Push Docker Image Stage"
}
stage('YAML') {
echo "5. Change YAML File Stage"
}
stage('Deploy') {
echo "6. Deploy Stage"
}
}
8.2.2、部署正式应用
Pipeline提供了两种方式来组织部署项目,pipeline script方式将所有的部署流程以脚本的形式贴上即可,pipeline script for scm方式可以引用代码仓库里的jenkinsfile文件来部署。本文选用第二种方式编写放置于代码仓库里的jenkinsfile文件。
helm 部署项目的values.yaml文件和项目的Dockerfile文件放置于阿里云OSS存储中,构建Dockerfile时拉取到仓库中,从而完成发版,大致发版流程如下:
我们需要操作和配置四个部分
- 1、Jenkins配置
需要访问代码仓库,此时我们需要添加Credentials;由于本文构建的是maven项目,项目构建完毕后,镜像需要打包推送到镜像仓库,因此这里一并加上docker私库的访问凭证和容器中访问k8s集群所需要的KUBECONFIG文件。
添加好访问凭证后,填上要访问的git仓库地址,下面branches to build处可以选填要操作的仓库分支,然后点击保存即可。
- 2、gitlab仓库配置
这部分配置了发版所有需要的流程,包括拉取部署/回滚,代码,打包,构建镜像,推送镜像,helm部署到k8s,通知等功能。