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   <!-- 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

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

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

安装成功

在这里插入图片描述

Jenkins入门配置

构建任务

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

查看 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插件生态满足项目多样需求,助力快速迭代与高效协作,构建稳定、可靠、易管理的持续集成环境。

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cloud Traveler

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值