整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

端到端JAVA DEVOPS自动化项目-第3部分

端到端JAVA DEVOPS自动化项目-第3部分

决条件:第二部分端到端Java DevOps自动化项目

译自 Part-3 End-to-End Java DevOps Automation Project,作者 Naveen Kumar。

使用 Jenkins 设置 CI/CD

在 Jenkins 中安装插件

1. Eclipse Temurin 安装程序

  • 自动安装和配置 Eclipse Temurin JDK。
  • 安装:
  • Jenkins 仪表板 -> 管理 Jenkins -> 管理插件 -> 可用选项卡。
  • 搜索“Eclipse Temurin Installer”并选择它。
  • 点击“不重启安装”。

2. Pipeline Maven 集成

  • 为 Jenkins Pipeline 提供 Maven 支持。

3. 配置文件提供程序

  • 允许您在 Jenkins 中集中定义和使用配置文件。

4. SonarQube 扫描程序

  • 将 Jenkins 与 SonarQube 集成,用于代码质量和安全分析。

5. Kubernetes CLI

  • 允许 Jenkins 使用 kubectl 与 Kubernetes 集群交互。

6. Kubernetes

  • 将 Jenkins 与 Kubernetes 集成,允许 Jenkins 代理作为 Pod 运行。

7. Docker

  • 使 Jenkins 能够与 Docker 交互以构建和管理容器。

8. Docker Pipeline

  • 使用 Docker 特定步骤扩展 Jenkins Pipeline。

9. Maven 集成

  • 使您的项目保持同步,并确保它们始终使用最新更新进行测试。

在 Jenkins 服务器上安装和配置 Trivy

  • 注意:没有用于 Trivy 的 Jenkins 插件,因此请直接在 Jenkins 服务器上安装它,并将其添加到您的 Jenkins Pipeline 阶段。

Trivy 安装命令

sudo apt-get install wget apt-transport-https gnupg lsb-release -y
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list
sudo apt-get update -y
sudo apt-get install trivy -y
trivy -v
# Expected output: Version: 0.53.0 (or the latest version)

全局工具配置:

“全局工具配置”部分(以前称为“管理 Jenkins -> 配置工具”)是您定义和管理 Jenkins 在所有作业中使用的工具的地方。这包括编译器、构建工具以及构建项目所需的其它实用程序。

创建 Git 凭据作为全局凭据

使用 GitHub 用户名作为用户名,使用我们在第 2 部分(设置私有存储库时)创建的令牌作为密码值

通过全局凭证创建 Git 凭证:将用户名设置为 GitHub 用户,将密码值设置为我们在第 2 部分(设置专用存储库时)创建的令牌。

凭据”部分允许您管理 Jenkins 用于安全地与外部系统交互的凭据。凭据可以包括用户名和密码、SSH 密钥、API 令牌等等。

从这里开始,我们将开始编写 Jenkins Pipeline 代码,您可以从该文件获取完整代码:pipeline.groovy,并逐步执行。

Jenkins Pipeline 设置步骤:

  1. 创建作业名称:BoardGame,类型为 Pipeline
  1. Enable - 丢弃旧构建(要保留的最大构建数=2)

管理 Jenkins -> 系统

系统”部分位于“管理 Jenkins”下,您可以在其中配置 Jenkins 的整体系统设置。这包括影响整个 Jenkins 安装及其运行方式的设置。

配置 SonarQube 服务器

在 Jenkins Pipeline 中编写 SonarQube 分析阶段之前,您需要在 Jenkins 中配置 SonarQube 服务器。以下是执行此操作的步骤:

1. 获取 SonarQube 服务器凭据:

转到 SonarQube 服务器 -> 管理 -> 安全 -> 用户 -> 令牌

2. 在 Jenkins 中创建全局凭据:

3. 在 Jenkins 中配置 SonarQube 服务器:

在 Jenkins Pipeline 中编写 SonarQube 质量门阶段之前的步骤,

转到 SonarQube 服务器 -> 管理 -> 配置 -> Webhook -> 令牌

添加 Jenkins IP:

以下是 SonarQube 和 Jenkins 集成完整架构的参考:

配置 Nexus

在编写 发布到 Nexus 工件阶段的代码之前,我们需要在 POM 文件中添加存储库 URL。

要配置 Jenkins 中的全局 Maven 设置,请执行以下步骤:

1. 导航到配置:

  • 转到 管理 Jenkins->管理文件
  • 添加一个新的配置文件。

2. 设置配置类型和 ID:

  • 选择配置类型为 全局 Maven settings.xml
  • 将配置文件的 ID 设置为 global-settings.

3. 编辑内容:

  • 通过在 <servers> 标签内添加以下代码来编辑配置文件的内容:
<servers>
  <server>
    <id>maven-releases</id>
    <username>nexus username</username>
    <password>nexus password</password>
  </server>
  <server>
    <id>maven-snapshots</id>
    <username>nexus username</username>
    <password>nexus password</password>
  </server>
</servers>

将 nexus username 和 nexus password 替换为您的实际 Nexus 凭据。

通过执行这些步骤,您将在 Jenkins 中配置全局 Maven 设置,以包含必要的 Nexus 存储库凭据。

Jenkins 的“管理 Jenkins”下的“管理文件”部分用于处理集中管理的配置文件,这些文件可以在 Jenkins 作业中引用。此功能是 Config File Provider 插件的一部分。

设置 Docker-hub 凭据:

阶段:部署到 Kubernetes 集群

通过运行以下命令在 Jenkins 服务器上安装 KUBECTL

curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.19.6/2021-01-05/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin
kubectl version --short --client

为了正确且安全地将应用程序部署到 Kubernetes 集群,我们需要遵循正确的流程,例如创建服务帐户和使用基于角色的访问控制 (RBAC)。

RBAC 代表基于角色的访问控制。假设我们的项目中有三个用户:

  • 用户 1:具有全面知识的架构师。
  • 用户 2:中级人员。
  • 用户 3:实习生或非常新的人。

在使用 Kubernetes 时,我们不能授予新人或中级人员完全访问权限。因此,我们创建角色:

  1. 角色 1:集群管理员访问权限
  • 对集群拥有完全访问权限。
  • 此角色分配给架构师(用户 1)。
  1. 角色 2:中级访问权限
  • 具有良好的权限级别,但不是完全的管理员。
  • 此角色分配给中级人员(用户 2)。
  1. 角色 3:只读访问权限
  • 仅允许查看资源,没有修改权限。
  • 此角色分配给实习生(用户 3)。

这种方法通过不向所有人授予完全访问权限来确保安全性。相反,我们创建具有适当权限的特定角色,并将它们分配给相应的用户。

现在,让我们继续通过创建服务帐户来使我们的部署安全。

  1. 创建服务帐户:
  • 此帐户将用于管理权限和控制访问级别。

通过遵循这些步骤,我们确保我们的 Kubernetes 部署安全且得到妥善管理。现在,让我们进入实际部分并创建服务帐户。

请参考此文件:service-role-for-jenkins.md 创建用于 Jenkins 的服务帐户。

创建服务帐户后,将 secret/mysecretname 的复制令牌粘贴到 Jenkins 全局凭据中:

在 Jenkins 中设置 HTML 电子邮件通知

在 Jenkins 中配置电子邮件的步骤:

现在使用此应用程序密码在 Jenkins 中创建凭据:

使用此应用密码在 Jenkins 中创建凭据:

提供的命令是 Jenkins 管道 post 块,它始终在主管道阶段运行后执行某些操作。此特定块发送包含 Jenkins 构建详细信息的电子邮件通知。以下是其使用情况和功能的细分:

关键组件:

post { always { ... } }

  • 此块确保在每次构建后执行封闭的脚本,无论结果如何(成功、失败等)。

环境变量和参数:

  • jobName=env.JOB_NAME
  • 获取 Jenkins 作业的名称。buildNumber=env.BUILD_NUMBER
  • 获取构建编号。pipelineStatus=currentBuild.result ?: 'UNKNOWN'
  • 获取当前构建结果;如果结果为空,则默认为 'UNKNOWN'。bannerColor=pipelineStatus.toUpperCase()=='SUCCESS' ? 'green' : 'red'
  • 根据构建状态设置横幅颜色(成功为 'green',否则为 'red')。

电子邮件正文构建:

  • 使用 HTML 模板构建电子邮件正文,显示作业名称、构建编号和构建状态。横幅的背景颜色根据构建结果而变化。

emailext 步骤:

  • subject: 将电子邮件主题设置为包含作业名称、构建编号和构建状态。
  • body: 设置电子邮件的 HTML 正文。
  • to: 指定收件人的电子邮件地址(您的电子邮件:'naveenkumarsingh5556@gmail.com')。
  • from 和 replyTo: 设置发件人的电子邮件地址(此处为 'jenkins@example.com')。
  • mimeType: 指定电子邮件内容类型为 HTML。
  • attachmentsPattern: 包含附件模式以附加指定的报告文件(此处为 'trivy-image-report.html')。

总结:

  • 目的: 通过电子邮件通知 Jenkins 作业构建状态。
  • 执行: 始终在构建后执行。
  • 电子邮件中的详细信息: 作业名称、构建编号、构建状态、控制台输出链接以及附加的报告。
  • 自定义: 横幅颜色根据构建结果而变化(成功为绿色,失败或其他状态为红色)。

此命令有助于通过自动电子邮件通知系统使利益相关者了解构建状态。

最终结果:

总结:

本文介绍了使用 Jenkins 为 Java DevOps 自动化项目设置全面的 CI/CD 管道的步骤。关键步骤包括安装必要的 Jenkins 插件,配置 SonarQube、Nexus、Docker 和 Kubernetes 等工具,以及设置全局凭据。我们还演示了如何使用基于角色的访问控制 (RBAC) 将应用程序安全地部署到 Kubernetes 集群,以及如何配置 HTML 电子邮件通知以获取构建状态更新。通过遵循这些步骤,您可以确保为您的 Java 应用程序建立一个健壮、自动化和安全的部署管道。

知道mac邮件客户端哪个好用?不要担心,这里为大家推荐Airmail Mac版,你可以登录iCloud、Gmail、Yahoo、Outlook、Google App等账号,Airmail 5 for mac中文版支持保留单个或多个帐户,快速切换账号,轻松收发邮件,非常便捷,需要mac邮件客户端的朋友赶紧试试airmail mac版吧!

Airmail for mac官方介绍

Airmail是一个新的邮件客户端,具有快速的***能和直观的交互。它支持iCloud?,MS Exchange,Gmail?,Google?应用程序,IMAP,POP3,Yahoo!?,AOL?,Outlook.com?和Live.com?。

无论您使用单个帐户还是多个帐户,Airmail都是从头开始设计的,可为您提供一致的体验,并提供快速,现代且易于使用的界面。Airmail很干净,可以让您不间断地收到电子邮件。这是你想要的邮件客户端,但直到现在还没有找到。

我们通过Airmail将可用***和功能提升到了新的水平。Airmail拥有漂亮的设计,并为所有主要的电子邮件服务提供支持。在闪存中切换帐户,轻松地将您的电子邮件转换为其他应用程序中的任务或备注,并在几秒钟内快速回复收到的消息。电子邮件从未如此简单和富有成效。

https://mac.orsoon.com/Mac/164236.html?id=MTY4MTYyJl8mMjIwLjE4Ni41Mi4yNw%3D%3D

airmail mac版功能特点

记录:

- 统一收件箱

- 自定义SMTP别名

- Exchange、iCloud?、Gmail?、IMAP、POP3、Google? Apps、Yahoo!?、AOL?、Outlook.com?、Live.com?

- 本地帐户

- 从Apple Mail、MBOX存档、EML、EMLX、Airmail 1.x导入

交互:

- 快速回复

- 撤消历史

- 离线***作

- 在不同邮箱间移动邮件

- 交互声音

- 多点触控手势

- Exchange会议邀请

快捷键:

- Gmail快捷键

- 自定义全局快捷键

- Quick Label、移动、标签和存档

- 快速文件夹选择

附件:

- 拖放

- Quick Look预览

- Google Drive、Dropbox、CloudApp、Box、Onedrive、Droplr、FTP

- Inline图像附件

- Winmail.dat预览

- VCalendar

对话:

- 按ID分组

- 按主题分组

- 时间倒序

- 屏蔽抄送对话

视觉:

- 多个视觉主题

- 最小和扩展模式

- 纯文本渲染

通知:

- 按帐户通知

- 通知中心支持

- 带自定义***作的通知提醒

地址:

- Gmail、Exchange和OS X联系人

- 联系人群组

- 按地址过滤

- 开放目录搜索

撰写器:

- Google App目录

- Exchange全局地址列表

- LDAP目录

- Markdown、Html(模板的Html源代码)和纯文本。

- 每个帐户的自定义设置

- 项目符号和编号列表。

发送:

- 自动抄送、密件抄送

- 等待***作

- 发送延迟

- 重定向

- 再次发送

- 退回

高级:

- 分屏支持

- 适用于Time Machine

- Deckles模式

- EML导入/导出

- 禁用GPU以延长电池寿命

- Applescript

- 活动监视器

- 数据检测器

签名:

- 多个账户签名

- Markdown、富文本、Html源代码和纯文本。

- 在引用上方或下方签名

搜索和过滤:

- 多个帐户全局搜索

- 强大的实时过滤

- 邮件、日期、附件、对话排序…

- 显示同一用户的邮件

- 标记和过滤

文件夹、标签:

- 嵌套文件夹

- 创建、删除和编辑文件夹

- 由iCloud同步的自定义色彩

- 自定义文件夹映射

- 待办事项、已完成、备忘录

发送至:

- Omnifocus

- Fantastical

- Evernote

- Apple Reminder

- Calendar

- BusyCal

- Things

- 2To

- Wunderlist

- Todoist

***:

- 每个用户自动加载远程图像,

- 禁用图标检测

创: JAP君 JAVAandPython君

大家可能都知道STMP这个协议,这个协议是用于发送邮件,很多语言都支持此协议,Python内置也是对SMTP支持的,可以发送纯文本邮件、HTML邮件以及带附件的邮件。在Python爬虫的开发中Email有啥用呢?Email主要起的是提醒作用,在我们爬虫运行的时候可能会遇到异常或者服务器方面的问题,我们可以通过邮件的形式来及时通知我们,我们再去进行处理。


Python对STMP支持有两个库,分别是smtplib和email。email库主要是负责构造邮件,smptlib库负责发送邮件。

我们可以把Email提醒功能封装起来,我们需要的时候直接调用即可,这样慢慢的也可以形成我们自己的一个爬虫系统模块。

我们现在具体来讲解一下,首先我们需要两个邮箱,一个用于发邮件,一个用于接收邮件,我这里用的分别是163邮箱和QQ邮箱.

首先最重要的一步,就是开启STMP功能。




上面两张图分别是163邮箱和QQ邮箱的STMP功能开通界面(必须要打开此功能

我们将其封装好的代码如下:


class SendMail(object):
def __init__(self,username,passwd,recv,title,content,
 file=None,
 email_host='smtp.163.com',port=25):
self.username=username
self.passwd=passwd
self.recv=recv
self.title=title
self.content=content
self.file=file
self.email_host=email_host
self.port=port
def send_mail(self):
 msg=MIMEMultipart()
#发送内容的对象
if self.file:#处理附件的
 att=MIMEText(open(self.file).read())
 att["Content-Type"]='application/octet-stream'
 att["Content-Disposition"]='attachment; filename="%s"'%self.file
 msg.attach(att)
 msg.attach(MIMEText(self.content))#邮件正文的内容
 msg['Subject']=self.title # 邮件主题
 msg['From']=self.username # 发送者账号
 msg['To']=self.recv # 接收者账号列表
self.smtp=smtplib.SMTP(self.email_host,port=self.port)
#发送邮件服务器的对象
self.smtp.login(self.username,self.passwd)
try:
self.smtp.sendmail(self.username,self.recv,msg.as_string())
 except Exception as e:
 print('出错了',e)
else:
 print('发送成功!')
def __del__(self):
self.smtp.quit()
# 调用封装
if __name__=='__main__':
 m=SendMail(
 username='XXX@163.com',passwd='XXX',recv='XXX@XXX.com',
 title='JAVAandPython君',content='这里可以改成异常的输出',file='JAVA.txt'
 )
 m.send_mail()


上面43行代码就可以完美解决,因为最近项目里面也用到了这一块的知识,所以特意分享给大家,本人觉得还是比较实用的!

最后,我自己是一名从事了多年开发的Python老程序员,辞职目前在做自己的Python私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的Python学习干货,可以送给每一位喜欢Python的小伙伴,想要获取的可以关注我的头条号并在后台私信我:Python,即可免费获取。