决条件:第二部分端到端Java DevOps自动化项目
译自 Part-3 End-to-End Java DevOps Automation Project,作者 Naveen Kumar。
1. Eclipse Temurin 安装程序
2. Pipeline Maven 集成
3. 配置文件提供程序
4. SonarQube 扫描程序
5. Kubernetes CLI
6. Kubernetes
7. Docker
8. Docker Pipeline
9. Maven 集成
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 在所有作业中使用的工具的地方。这包括编译器、构建工具以及构建项目所需的其它实用程序。
使用 GitHub 用户名作为用户名,使用我们在第 2 部分(设置私有存储库时)创建的令牌作为密码值
通过全局凭证创建 Git 凭证:将用户名设置为 GitHub 用户,将密码值设置为我们在第 2 部分(设置专用存储库时)创建的令牌。
“凭据”部分允许您管理 Jenkins 用于安全地与外部系统交互的凭据。凭据可以包括用户名和密码、SSH 密钥、API 令牌等等。
从这里开始,我们将开始编写 Jenkins Pipeline 代码,您可以从该文件获取完整代码:pipeline.groovy,并逐步执行。
“系统”部分位于“管理 Jenkins”下,您可以在其中配置 Jenkins 的整体系统设置。这包括影响整个 Jenkins 安装及其运行方式的设置。
在 Jenkins Pipeline 中编写 SonarQube 分析阶段之前,您需要在 Jenkins 中配置 SonarQube 服务器。以下是执行此操作的步骤:
1. 获取 SonarQube 服务器凭据:
转到 SonarQube 服务器 -> 管理 -> 安全 -> 用户 -> 令牌
2. 在 Jenkins 中创建全局凭据:
3. 在 Jenkins 中配置 SonarQube 服务器:
在 Jenkins Pipeline 中编写 SonarQube 质量门阶段之前的步骤,
转到 SonarQube 服务器 -> 管理 -> 配置 -> Webhook -> 令牌
添加 Jenkins IP:
以下是 SonarQube 和 Jenkins 集成完整架构的参考:
在编写 发布到 Nexus 工件阶段的代码之前,我们需要在 POM 文件中添加存储库 URL。
要配置 Jenkins 中的全局 Maven 设置,请执行以下步骤:
1. 导航到配置:
2. 设置配置类型和 ID:
3. 编辑内容:
<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 插件的一部分。
阶段:部署到 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 代表基于角色的访问控制。假设我们的项目中有三个用户:
在使用 Kubernetes 时,我们不能授予新人或中级人员完全访问权限。因此,我们创建角色:
这种方法通过不向所有人授予完全访问权限来确保安全性。相反,我们创建具有适当权限的特定角色,并将它们分配给相应的用户。
现在,让我们继续通过创建服务帐户来使我们的部署安全。
通过遵循这些步骤,我们确保我们的 Kubernetes 部署安全且得到妥善管理。现在,让我们进入实际部分并创建服务帐户。
请参考此文件:service-role-for-jenkins.md 创建用于 Jenkins 的服务帐户。
创建服务帐户后,将 secret/mysecretname 的复制令牌粘贴到 Jenkins 全局凭据中:
在 Jenkins 中设置 HTML 电子邮件通知
在 Jenkins 中配置电子邮件的步骤:
现在使用此应用程序密码在 Jenkins 中创建凭据:
使用此应用密码在 Jenkins 中创建凭据:
提供的命令是 Jenkins 管道 post 块,它始终在主管道阶段运行后执行某些操作。此特定块发送包含 Jenkins 构建详细信息的电子邮件通知。以下是其使用情况和功能的细分:
post { always { ... } }
环境变量和参数:
电子邮件正文构建:
emailext 步骤:
总结:
此命令有助于通过自动电子邮件通知系统使利益相关者了解构建状态。
最终结果:
本文介绍了使用 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,即可免费获取。
*请认真填写需求信息,我们会在24小时内与您取得联系。