写点什么

基于 Docker 与 Jenkins 实现自动化部署

作者:轶天下事
  • 2025-01-06
    海南
  • 本文字数:5931 字

    阅读完需:约 19 分钟

前言

重塑自动化部署新高度,Docker 携手 Jenkins,在华为云 Flexus X 云服务器的加持下,引领持续集成与部署的新纪元。Flexus X 以其卓越的性能、灵活的资源配置和高效的成本优化,为 Docker 容器化应用与 Jenkins 自动化流水线提供了理想的运行环境。无论是快速构建、测试还是部署,Flexus X 都能确保流程顺畅无阻,大幅提升软件开发与交付效率。立即拥抱华为云 828 企业上云节优惠,开启您的 Docker 与 Jenkins 自动化部署之旅,让软件创新更快一步!

链接直达华为云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 的世界!

环境规划

部署流程

需要了解:

• 采用 docker 方式进行部署 Jenkins(CI/CD)工具

• 详细购买配置实例可参考文章: 快速部署华为云Flexus X实例,开启您的云端之旅

• 部署 docker 服务请参考文章:华为FlexusX与Docker+Nginx的高效整合之路

配置 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]# lsopenjdk-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.2export PATH=$JAVA_HOME/bin:$PATH#加载配置文件[root@flexusx-251f ~]# source /etc/profile

查看 java 版本

[root@flexusx-251f ~]# java -versionopenjdk version "12.0.2" 2019-07-16OpenJDK 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]# lsapache-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]# lsapache-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]# lsbin  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.9export PATH=$PATH:$MAVEN_HOME/bin[root@flexusx-251f maven]# mvn -vApache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)Maven home: /usr/local/maven/apache-maven-3.9.9Java version: 12.0.2, vendor: Oracle Corporation, runtime: /java/jdk-12.0.2Default locale: en_US, platform encoding: UTF-8OS 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.yamlversion: "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 -dWARN[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 lsNAME                STATUS              CONFIG FILESjenkins             running(1)          /jenkins/docker-compose.yaml[root@flexusx-251f jenkins]# docker ps | grep jen8e2fba3b21aa   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/initialAdminPassworddd426feefcb64fa5a45a6dd743f28787[root@flexusx-251f jenkins]# docker exec -it jenkins /bin/bashjenkins@8e2fba3b21aa:/$ cat /var/jenkins_home/secrets/initialAdminPassworddd426feefcb64fa5a45a6dd743f28787jenkins@8e2fba3b21aa:/$ exitexit#宿主机[root@flexusx-251f jenkins]# cat /jenkins/data/secrets/initialAdminPassworddd426feefcb64fa5a45a6dd743f28787

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


 

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

搜索 GIT,勾选 Git Parameter

点击安装


 

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


 

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


 

 

 

安装成功


 

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/bashjenkins@8e2fba3b21aa:/$ ls /var/jenkins_home/workspace/test01README.en.md  README.mdjenkins@8e2fba3b21aa:/$ exitexit

配置 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.jargenerated-sources  maven-status#通过阿里云下载的镜像会存放在这[root@flexusx-251f ~]# ls /usr/local/maven/apache-maven-3.9.9/repository/antlr                     classworlds    commons-fileupload  eu     mysqlaopalliance               com            commons-io          javax  netbackport-util-concurrent  commons-cli    commons-logging     junit  orgch                        commons-codec  dom4j               log4j

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

体验和感受

在快节奏的软件开发与运维领域,自动化部署已成为提升效率、减少人为错误的关键。华为云 Flexusx 服务器,凭借其卓越的性能、灵活的扩展性和稳定的云环境,为企业用户提供了理想的自动化部署平台。结合 Docker 容器化技术与 Jenkins 持续集成/持续部署(CI/CD)工具,Flexus X 实例更是如虎添翼,为企业开启了自动化部署的新纪元。

Docker 的轻量级与可移植性,使得应用环境能够轻松打包、部署与迁移,而 Jenkins 则以其强大的自动化流程管理能力,将代码提交、构建、测试、部署等环节无缝衔接。在 Flexusx 服务器上部署 Docker 与 Jenkins,企业可以构建一套高效的自动化部署流水线,实现从代码提交到线上运行的快速迭代。

值此 828 华为云企业上云节之际,一起体验 Flexusx 服务器上的 Docker 与 Jenkins 自动化部署解决方案。无论您是初创公司还是大型企业,都能在这一平台上找到适合自己的自动化部署策略。让 Flexusx 成为您数字化转型的加速器,Docker 与 Jenkins 则为您的软件交付效率插上翅膀。

选择华为云 Flexusx,携手 Docker 与 Jenkins,共同开启自动化部署的新篇章。点击下方链接,立即行动,在 828 上云节的特惠期间,让我们携手并进,共创数字化未来!

产品链接华为云Flexus云服务器X实例直播建站服务器-华为云


 

用户头像

轶天下事

关注

还未添加个人签名 2022-07-30 加入

还未添加个人简介

评论

发布
暂无评论
基于Docker与Jenkins实现自动化部署_轶天下事_InfoQ写作社区