【Docker实战】基于Docker与Jenkins实现自动化部署
前言
重塑自动化部署新高度,Docker携手Jenkins,在华为云Flexus X云服务器的加持下,引领持续集成与部署的新纪元。Flexus X以其卓越的性能、灵活的资源配置和高效的成本优化,为Docker容器化应用与Jenkins自动化流水线提供了理想的运行环境。无论是快速构建、测试还是部署,Flexus X都能确保流程顺畅无阻,大幅提升软件开发与交付效率。
链接直达:华为云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的世界!
环境规划
操作系统 | Jenkins | openjdk | Maven | docker | docker-compose | 连接方式 |
---|---|---|---|---|---|---|
Huawei Cloud EulerOS 2.0 | jenkins/jenkins | 12.0.2 | 3.9.9 | 27.1.1 | 2.29.1 | 本地==shell== |
部署流程
需要了解:
- 采用
docker
方式进行部署Jenkins
(CI/CD)工具- 详细购买配置实例可参考文章: 快速部署华为云Flexus X实例,开启您的云端之旅
- 部署docker服务请参考文章: 华为FlexusX与Docker+Nginx的高效整合之路
配置jdk环境
注意:选择适合自己的JDK,并且注意安装JDK的系统
上传软件包
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 <!-- localRepository
50 | The path to the local repository maven will use to store artifacts.
51 |
52 | Default: ${user.home}/.m2/repository
53 <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 # 挂载maven
environment:
- 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
输入密码进行登录,进入插件下载页面
点击选择插件来安装,选择需要安装的插件(可以再搜索框进行搜索)
- 搜索
GIT
,勾选Git Parameter
- 点击安装
正在安装中(等待一小会时间)
下载完毕,设置信息,点击==保存并完成==,进入首页
安装成功
Jenkins入门配置
构建任务
准备好gitee仓库中的项目,并且通过Jenkins配置项目的实现当前项目的DevOps基本流程
构建Maven工程发布到gitee中(gitee,github都可以)
查看 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包(随便找了个项目进行测试)
[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持续集成/持续部署(CI/CD)工具
,Flexus X实例更是如虎添翼,为企业开启了自动化部署的新纪元。
Docker
的轻量级与可移植性,使得应用环境能够轻松打包、部署与迁移,而Jenkins则以其强大的自动化流程管理能力,将代码提交、构建、测试、部署等环节无缝衔接。在Flexusx服务器上部署Docker与Jenkins,企业可以构建一套高效的自动化部署流水线,实现从代码提交到线上运行的快速迭代。
- 点赞
- 收藏
- 关注作者
评论(0)