使用 Jenkins、Gitlab、Harbor、Helm、k8s 来实现流水线作业

使用 Jenkins、Gitlab、Harbor、Helm、Kubernetes 来实现一个完整的持续集成和持续部署的流水线作业

一、流程

在这里插入图片描述

  1. 开发人员提交代码到 Gitlab 代码仓库
  2. 通过 Gitlab 配置的 Jenkins Webhook 触发 Pipeline 自动构建
  3. Jenkins 触发构建构建任务,根据 Pipeline 脚本定义分步骤构建
  4. 先进行代码静态分析,单元测试
  5. 然后进行 Maven 构建(Java 项目)
  6. 根据构建结果构建 Docker 镜像
  7. 推送 Docker 镜像到 Harbor 仓库
  8. 触发更新服务阶段,使用 Helm 安装/更新 Release
  9. 查看服务是否更新成功。

二、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体系的基石。

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"]

#带上编译

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"]

在这里插入图片描述


学如逆水行舟,不进则退。学习如赶路,不能慢一步。


相关推荐

  1. k8s:使用Fabric 访问api-server

    2024-04-09 07:26:04       33 阅读
  2. k<span style='color:red;'>8</span><span style='color:red;'>s</span><span style='color:red;'>实例</span>

    k8s实例

    2024-04-09 07:26:04      44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-09 07:26:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-09 07:26:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-09 07:26:04       82 阅读
  4. Python语言-面向对象

    2024-04-09 07:26:04       91 阅读

热门阅读

  1. 详解Oracle数据库的检查点(Checkpoint)

    2024-04-09 07:26:04       36 阅读
  2. 设计模式之迭代器模式

    2024-04-09 07:26:04       33 阅读
  3. verilog 和 system verilog 有什么区别?

    2024-04-09 07:26:04       38 阅读
  4. 一些考研经验

    2024-04-09 07:26:04       40 阅读
  5. Rust 实战练习 - 9. 文本编码,URL编码,加密解密

    2024-04-09 07:26:04       37 阅读
  6. 10.枚举

    10.枚举

    2024-04-09 07:26:04      38 阅读
  7. uniapp 检查更新

    2024-04-09 07:26:04       37 阅读
  8. 新型基础设施建设(新基建)

    2024-04-09 07:26:04       32 阅读
  9. golang 使用 cipher、aes 实现 oauth2 验证

    2024-04-09 07:26:04       36 阅读
  10. MySQL视图及如何导入导出

    2024-04-09 07:26:04       35 阅读
  11. 【IP层的校验和与UDP的校验和】+【FPGA实现】

    2024-04-09 07:26:04       27 阅读
  12. Prime Ring Problem(UVA 524)

    2024-04-09 07:26:04       37 阅读