当前位置: 首页 > news >正文

828华为云征文 | 基于Docker与Jenkins实现自动化部署

需要了解

  • 本文章主要讲述在 华为云Flexus X 实例上使用docker快速部署持续集成工具 Jenkins,通过插件来自动化CI/CD过程中的各种琐碎功能。
  • 选择合适的云服务器: 本文采用的是 华为云服务器 Flexus X 实例(推荐使用)
  • 连接方式: 本文通过本地shell 方式,通过弹性IP 远程连接至服务器,进行部署搭建
  • 操作系统版本: Huawei Cloud EulerOS 2.0
  • Docekr版本: Docker v27.1.1
  • Docekr-compose版本: Docker Compose v2.29.1
  • Jenkins版本: Jenkins 2.474
  • JDK版本openjdk 12.0.2
  • maven版本Apache Maven 3.9.9
  • 服务器购买链接:华为云服务器 Flexus X 实例
  • Docekr安装可参考文章: 华为FlexusX与Docker+Nginx的高效整合之路
  • 详细购买配置实例可参考文章: 快速部署华为云Flexus X实例,开启您的云端之旅

Jenkins介绍

Jenkins是一个开源的持续集成和持续部署(CI/CD)工具,它基于Java开发,支持各种编程语言和平台。Jenkins以其强大的功能和灵活性,在现代软件开发中扮演着重要角色。

Jenkins应用广泛,大多数互联网公司都采用Jenkins配合GitLab、Docker、K8s作为实现DevOps的核心工具。

Jenkins最强大的就在于插件,Jenkins官方提供了大量的插件库,来自动化CI/CD过程中的各种琐碎功能。

Jenkins最主要的工作就是将GitLab上可以构建的工程代码拉取并且进行构建,再根据流程可以选择发布到测试环境或是生产环境。

Jenkins需要大量的插件保证工作,安装成本较高,下面会基于Docker搭建Jenkins。

在这里插入图片描述

CI/CD的理解

一般是GitLab上的代码经过大量的测试后,确定发行版本,再发布到生产环境。

CI/CD可以理解为:

  • CI过程即是通过Jenkins将代码拉取、构建、制作镜像交给测试人员测试。
    • 持续集成:让软件代码可以持续的集成到主干上,并自动构建和测试。
  • CD过程即是通过Jenkins将打好标签的发行版本代码拉取、构建、制作镜像交给运维人员部署。
    • 持续交付:让经过持续集成的代码可以进行手动部署。
    • 持续部署:让可以持续交付的代码随时随地的自动化部署。

在这里插入图片描述

华为云Flexus X实例部署Jenkins的特点

灵活高效部署:华为云FlexusX结合Docker,让Jenkins部署变得灵活且高效,资源动态调整,构建速度显著提升。

稳定安全运行:FlexusX的稳定性和Docker的隔离性为Jenkins提供可靠运行环境,确保高负载下稳定运行,同时保障数据安全。

简化管理运维:一键部署与华为云统一管理界面,极大简化了Jenkins在FlexusX上的部署与管理流程,提升运维效率。

丰富插件支持:Jenkins庞大的插件生态与FlexusX实例完美融合,满足多样化项目需求,为软件开发团队提供强大支持。

接下来让我们使用docker,一起走进Jenkins的世界!

配置jdk环境

注意:选择适合自己的JDK,并且注意安装JDK的系统

地址:https://www.oracle.com/java/technologies/downloads/

上传软件包 openjdk-12.0.2_linux-x64_bin.tar.gz 到实例中

[root@flexusx-251f ~]# mkdir /usr/local/java
[root@flexusx-251f ~]# cd /usr/local/java/
[root@flexusx-251f java]# ls
openjdk-12.0.2_linux-x64_bin.tar.gz

解压软件包

[root@flexusx-251f java]# tar -zxvf openjdk-12.0.2_linux-x64_bin.tar.gz 

添加java环境变量,在文件最后添加

[root@flexusx-251f ~]# vim /etc/profile
[root@flexusx-251f ~]# cat /etc/profile
..........
export JAVA_HOME=/usr/local/java/jdk-12.0.2
export PATH=$JAVA_HOME/bin:$PATH# 加载配置文件
[root@flexusx-251f ~]# source /etc/profile

查看java版本

[root@flexusx-251f ~]# java -version
openjdk version "12.0.2" 2019-07-16
OpenJDK Runtime Environment (build 12.0.2+10)
OpenJDK 64-Bit Server VM (build 12.0.2+10, mixed mode, sharing)

配置Maven环境

打开Maven官网下载对应软件包:Maven – Download Apache Maven

根据自身需求选择对应版本,在本实例中选择 v3.9.9

在这里插入图片描述

上传软件包

[root@flexusx-251f ~]# mkdir -p /usr/local/maven
[root@flexusx-251f ~]# cd /usr/local/maven/
[root@flexusx-251f maven]# ls
apache-maven-3.9.9-bin.tar.gz
[root@flexusx-251f maven]# tar -zxvf apache-maven-3.9.9-bin.tar.gz
[root@flexusx-251f maven]# ls
apache-maven-3.9.9  apache-maven-3.9.9-bin.tar.gz
[root@flexusx-251f maven]# cd apache-maven-3.9.9/
[root@flexusx-251f apache-maven-3.9.9]# ls
bin  boot  conf  lib  LICENSE  NOTICE  README.txt

解压完毕以后,新建一个repository仓库,用于存放Maven下载下来的jar包

[root@flexusx-251f maven]# mkdir repository

编辑settings.xml文件

设置maven仓库

[root@flexusx-251f maven]# cd apache-maven-3.9.9/
[root@flexusx-251f apache-maven-3.9.9]# vim conf/settings.xml
.....................
49   <!-- localRepository50    | The path to the local repository maven will use to store artifacts.51    |52    | Default: ${user.home}/.m2/repository53   <localRepository>/path/to/local/repo</localRepository>54   -->55   <localRepository>/usr/local/maven/repository</localRepository> # 设置镜像仓库地址
...........

配置镜像,配置为阿里云镜像地址

.................................................<mirrors><!-- mirror| Specifies a repository mirror site to use instead of a given repository. The repository that| this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used| for inheritance and direct lookup purposes, and must be unique across the set of mirrors.|<mirror><id>mirrorId</id><mirrorOf>repositoryId</mirrorOf><name>Human Readable Name for this Mirror.</name><url>http://my.repository.com/repo/path</url></mirror>--><mirror><id>maven-default-http-blocker</id><mirrorOf>external:http:*</mirrorOf><name>Pseudo repository to mirror external repositories initially using HTTP.</name><url>http://0.0.0.0/</url><blocked>true</blocked></mirror># 修改为阿里云镜像地址<mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>https://maven.aliyun.com/repository/public</url></mirror></mirrors>
...................

配置环境变量

[root@flexusx-251f maven]# vim /etc/profile
...
# 在文件最后加入两行参数信息
export MAVEN_HOME=/usr/local/maven/apache-maven-3.9.9
export PATH=$PATH:$MAVEN_HOME/bin[root@flexusx-251f maven]# mvn -v
Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)
Maven home: /usr/local/maven/apache-maven-3.9.9
Java version: 12.0.2, vendor: Oracle Corporation, runtime: /java/jdk-12.0.2
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "5.10.0-182.0.0.95.r1941_123.hce2.x86_64", arch: "amd64", family: "unix"

搭建Jenkins

创建对应目录,编写docker-compose文件

[root@flexusx-251f ~]# mkdir /jenkins
[root@flexusx-251f ~]# cd /jenkins/
[root@flexusx-251f jenkins]# mkdir data[root@flexusx-251f jenkins]# vim docker-compose.yaml
[root@flexusx-251f jenkins]# cat docker-compose.yaml
version: "2.29.1"                  # 指定docker-compose版本
services:  myjenkins:  image: jenkins/jenkins         # 指定镜像名称container_name: myjenkins      # 指定容器名称ports:  - "1020:8080"                # 用于主机访问Jenkins的Web界面- "1021:50000"               # 用于Jenkins的代理(agent)连接volumes:  - /jenkins/data/:/var/jenkins_home/                     # 指定对应目录- /usr/local/java/jdk-12.0.2:/usr/local/java            # 挂载java- /usr/local/maven/apache-maven-3.9.9:/usr/local/maven  # 挂载mavenenvironment:  - JAVA_OPTS=-Dorg.apache.commons.jelly.tags.fmt.timeZone='Asia/Shanghai'   # 指定时间restart: always[root@flexusx-251f jenkins]# docker-compose up -d
WARN[0000] /jenkins/docker-compose.yaml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Running 2/2✔ Network jenkins_default  Created                                               0.0s✔ Container jenkins        Started                                               0.2s
[root@flexusx-251f jenkins]# docker-compose ls
NAME                STATUS              CONFIG FILES
jenkins             running(1)          /jenkins/docker-compose.yaml[root@flexusx-251f jenkins]# docker ps | grep jen
8e2fba3b21aa   jenkins/jenkins                                                            "/usr/bin/tini -- /u…"   18 seconds ago      Up 17 seconds           0.0.0.0:1020->8080/tcp, :::1020->8080/tcp, 0.0.0.0:1021->50000/tcp, :::1021->50000/tcp           jenkins

初始化配置Jenkins

Flexus X实例 放行端口1020,1021

在这里插入图片描述

浏览器输入地址:http://主机IP:1020

在这里插入图片描述

查看密码的方式有两种,任选其一即可

# 容器内
[root@flexusx-251f jenkins]# cat /jenkins/data/secrets/initialAdminPassword
dd426feefcb64fa5a45a6dd743f28787
[root@flexusx-251f jenkins]# docker exec -it jenkins /bin/bash
jenkins@8e2fba3b21aa:/$ cat /var/jenkins_home/secrets/initialAdminPassword
dd426feefcb64fa5a45a6dd743f28787
jenkins@8e2fba3b21aa:/$ exit
exit# 宿主机
[root@flexusx-251f jenkins]# cat /jenkins/data/secrets/initialAdminPassword
dd426feefcb64fa5a45a6dd743f28787

输入密码进行登录,进入插件下载页面

在这里插入图片描述

点击选择插件来安装,选择需要安装的插件(可以再搜索框进行搜索)

  1. 搜索GIT,勾选Git Parameter
  2. 点击安装

在这里插入图片描述

正在安装中(等待一小会时间)

在这里插入图片描述

下载完毕,设置信息,点击保存并完成,进入首页

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

安装成功

在这里插入图片描述

Jenkins入门配置

构建任务

准备好gitee仓库中的项目,并且通过Jenkins配置项目的实现当前项目的DevOps基本流程

  • 构建Maven工程发布到gitee中(gitee,github都可以)

  • gitee官网:https://gitee.com/dashboard/projects

查看 Gitee 中的项目

在这里插入图片描述

Jenkins 点击左侧导航栏新建任务

在这里插入图片描述

选择自由风格构建任务

在这里插入图片描述

配置源码拉取地址

Jenkins需要将Git上存放的源码存储到Jenkins服务所在磁盘的本地

配置任务源码拉取地址

在这里插入图片描述

Jenkins立即构建

在这里插入图片描述

查看构建工程的日志

在这里插入图片描述

可以看到源码已经拉取带Jenkins本地,可以根据第三行日志信息,查看Jenkins本地拉取到的源码。

查看Jenkins容器中/var/jenkins_home/workspace/test01的源码

[root@flexusx-251f jenkins]# docker exec -it jenkins /bin/bash
jenkins@8e2fba3b21aa:/$ ls /var/jenkins_home/workspace/test01
README.en.md  README.md
jenkins@8e2fba3b21aa:/$ exit
exit

配置maven构建代码

Jenkins配置JDK&Maven并保存

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

配置Jenkins任务构建代码

  • 前提是你确实想要执行 Maven 的 package 生命周期阶段。package 阶段会编译项目代码,运行测试(如果配置了的话),并打包应用程序(如 JAR 或 WAR 文件)。

在这里插入图片描述

在这里插入图片描述

立即构建测试,查看target下的jar包(随便找了个项目进行测试)

  • https://gitee.com/zi_yinhai/day06_git_test.git

在这里插入图片描述

[root@flexusx-251f ~]# ls /jenkins/data/workspace/test01/target/
classes            maven-archiver  newprojectday_06-1.0-SNAPSHOT.jar
generated-sources  maven-status# 通过阿里云下载的镜像会存放在这
[root@flexusx-251f ~]# ls /usr/local/maven/apache-maven-3.9.9/repository/
antlr                     classworlds    commons-fileupload  eu     mysql
aopalliance               com            commons-io          javax  net
backport-util-concurrent  commons-cli    commons-logging     junit  org
ch                        commons-codec  dom4j               log4j

至此我们已经成功搭建完成持续集成工具

总结

在华为云FlexusX实例上,我们成功部署Docker化的Jenkins,实现开发流程新飞跃。利用FlexusX的“柔性算力”与Docker的轻量级特性,灵活配置资源,简化部署管理。Jenkins在Docker中高效构建,稳定可靠,保障高负载下的持续集成。华为云服务助力一键部署,管理界面统一监控,提升运维效率。Jenkins插件生态满足项目多样需求,助力快速迭代与高效协作,构建稳定、可靠、易管理的持续集成环境。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 大模型推理--KV Cache
  • SCL 常见问题
  • 异常整理(JAVA基础)
  • 【C++】STL容器详解【上】
  • Java——堆
  • 路灯集中控制器与智慧照明:塑造未来城市的智能光影
  • 亦菲喊你来学机器学习(20) --PCA数据降维
  • 江协科技stm32————11-5 硬件SPI读写W25Q64
  • explicit 的作用(如何避免编译器进行隐式类型转换)
  • 并发编程:synchronized 关键字
  • 【Linux】Linux 可重入函数
  • 0.ffmpeg面向对象oopc
  • 项目实战系列三: 家居购项目 第五部分
  • C++ STL-Map容器从入门到精通详解
  • HarmonyOs DevEco Studio小技巧9--翻译软件
  • Computed property XXX was assigned to but it has no setter
  • dva中组件的懒加载
  • express.js的介绍及使用
  • fetch 从初识到应用
  • Java 最常见的 200+ 面试题:面试必备
  • java概述
  • PAT A1120
  • react-native 安卓真机环境搭建
  • SpingCloudBus整合RabbitMQ
  • spring + angular 实现导出excel
  • storm drpc实例
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 类orAPI - 收藏集 - 掘金
  • 世界上最简单的无等待算法(getAndIncrement)
  • 微信小程序填坑清单
  • 1.Ext JS 建立web开发工程
  • AI算硅基生命吗,为什么?
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​如何防止网络攻击?
  • ​如何在iOS手机上查看应用日志
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (2024)docker-compose实战 (8)部署LAMP项目(最终版)
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (转)EOS中账户、钱包和密钥的关系
  • ****Linux下Mysql的安装和配置
  • .Net 垃圾回收机制原理(二)
  • .NET基础篇——反射的奥妙
  • .Net实现SCrypt Hash加密
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [C/C++]关于C++11中的std::move和std::forward
  • [CareerCup] 13.1 Print Last K Lines 打印最后K行
  • [ComfyUI]Flux+MiniCPM-V强强联手艺术创意,媲美GPT4V级国产多模态视觉大模型