文章目录
使用 Jenkins、Gitlab、Harbor、Helm、Kubernetes 来实现一个完整的持续集成和持续部署的流水线作业
一、流程
- 开发人员提交代码到 Gitlab 代码仓库
- 通过 Gitlab 配置的 Jenkins Webhook 触发 Pipeline 自动构建
- Jenkins 触发构建构建任务,根据 Pipeline 脚本定义分步骤构建
- 先进行代码静态分析,单元测试
- 然后进行 Maven 构建(Java 项目)
- 根据构建结果构建 Docker 镜像
- 推送 Docker 镜像到 Harbor 仓库
- 触发更新服务阶段,使用 Helm 安装/更新 Release
- 查看服务是否更新成功。
二、Dockerfile
dockerfile文件详解
Dockerfile是一个文本文件,用于定义Docker镜像的构建过程,它包含了一系列指令和说明,用于指导Docker如何构建镜像。Dockerfile的基本结构包括基础镜像、镜像元信息、镜像操作指令以及容器启动时执行的命令。Docker会从上到下顺序执行Dockerfile中的指令。12
Dockerfile的指令主要包括:
- FROM:指定基础镜像,必须是Dockerfile中的第一条指令。例如,FROM ubuntu:latest。
- RUN:在基础镜像之上运行命令,例如,RUN apt-get update或RUN ["executable", "param1", "param2"]。
- CMD:指定容器启动时运行的命令,例如,CMD ["executable", "param1", "param2"]或CMD command param1 param2。
- WORKDIR:设置工作目录,例如,WORKDIR /path/to/workdir。
- ADD:从宿主机复制文件或目录到容器中,例如,ADD ./path/on/host:/path/in/container。
- ENV:设置环境变量,例如,ENV VAR_NAME=value。
在编写Dockerfile时,应注意以下几点:
注释:使用#进行注释。
指令格式:指令后面应跟随至少一个参数,且指令本身应大写。
多行命令:避免在单个RUN指令中包含多行命令,因为这可能导致镜像层过多,增加构建和部署的时间。
缓存利用:RUN指令创建的中间镜像会被缓存,使用--no-cache参数可以避免使用这些缓存镜像。
通过这些指令的组合,可以定义复杂的镜像构建过程,包括安装软件包、配置环境变量、复制文件等操作。Dockerfile不仅定义了软件的原材料(Dockerfile),还涉及到Docker镜像和Docker容器的概念,这三者共同构成了Docker体系的基石。
bash
FROM openjdk:8-jdk
MAINTAINER meng <meng@mail.com>
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/poll-0.0.2-SNAPSHOT.jar /app/poll.jar
EXPOSE 8080
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar","/app/poll.jar"]
#带上编译
bash
FROM maven:3.6-alpine as BUILD
COPY src /usr/app/src
COPY pom.xml /usr/app
RUN mvn -f /usr/app/pom.xml clean package -Dmaven.test.skip=true
FROM openjdk:8-jdk
MAINTAINER meng <meng@mail.com>
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 --from=BUILD /usr/app/target/poll-0.0.2-SNAPSHOT.jar /app/poll.jar
EXPOSE 8080
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar","/app/poll.jar"]
学如逆水行舟,不进则退。学习如赶路,不能慢一步。