1. kubernetes之CI/CD第二篇-jenkins结合helm部署应用:
1. 概述:
在前期的博文中我已经初步介绍过kubernetes环境下的CI/CD的使用。主要是jenkins slave pod自动创建和销毁,当有jenkins job任务执行的时候,就会自动创建一个jenkins slave pod。在本篇博文中,我们将介绍jenkins生成slave pod的另外一种方法,就是在pipeline脚本里面定义slave pod的镜像等,同时将Dockerfile、Jenkinsfile、YAML清单文件全部放到gitlab上面,通过jenkins的插件Blue Ocean自动创建多任务的Job。主要的流程包括如下:
- Jenkins服务器安装Blue Ocean插件;
- 开发人员提交代码到 Gitlab 代码私有仓库;
- 通过 Gitlab 配置的 Jenkins Webhook 触发 Pipeline 自动构建;
- 配置Blue Ocean,添加git地址和认证信息,创建多分支流水线任务;
- Jenkins 触发构建构建任务,根据 Pipeline 脚本定义分步骤构建;
- 先进行代码静态分析,单元测试;
- 然后进行 Maven 构建(Java 项目);
- 根据构建结果构建 Docker 镜像;
- 推送 Docker 镜像到 test 仓库;
- 触发更新服务阶段,使用 Helm 安装/更新 Release;
- 查看服务是否更新成功。
2. 实施过程:
2.1 安装插件Blue Ocean:
选择系统管理---插件管理---Available---输入Blue Ocean搜素插件名称---选择安装插件并重启服务生效
2.2 编写DockerFile:
这里的DockerFile主要用途是产生应用的镜像,并上传到私有仓库。一般一个微服务模块就是一个Dockerfile,也就是一个独立的镜像;我这边演示的一个demo程序,有两个微服务模块,所以就需要两个Dockerfile,文件分别放置到微服务pom.xml打包文件的同级目录;
这个是后端应用的Dockerfile
# Start with a base image containing Java runtime
FROM openjdk:8-jdk-alpine
# Add Maintainer Info
LABEL maintainer="gaoyang@test.cn"
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
ENV TZ=Asia/Shanghai
RUN mkdir /app
WORKDIR /app
COPY target/polls-0.0.1-SNAPSHOT.jar /app/polls.jar
# Make port 8080 available to the world outside this container
EXPOSE 8080
# Run the jar file
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app/polls.jar"]
Dockerfile解释如下:
1. 定义基础镜像,一般是alpine镜像;这种镜像比较小,此处使用jdk1.8的镜像;
2. 定义环境变量,创建应用目录,拷贝maven编译之后的jar包到容器内的应用目录;
3. 定义暴露端口,此处并不是真的暴露,只是描述;真正暴露的端口在yaml清单文件里面定义;
4. 定义入口命令,也就是程序启动的命令;
这个是前端应用的Dockerfile,前端应用是一个nginx服务器,将前端的html文件放在nginx根目录
FROM nginx:1.15.10-alpine
ADD build /usr/share/nginx/html
ADD nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
ENTRYPOINT ["nginx","-g","daemon off;"]
Dockerfile解释如下:
1. 定义基础镜像,一般是alpine镜像;这种镜像比较小;此处使用nginx镜像作为前端的web服务器;
2. 添加网页html文件到nginx网页