Jenkins+Docker+Gitee搭建自动化部署平台

news2024/9/29 17:31:42

目录

服务器准备

Docker安装

yum 包更新到最新

设置yum源

安装docker

启动和开机启动

验证安装是否成功

Jenkins安装

拉取镜像

创建映射目录

运行镜像

运行出错

修正权限

重新运行镜像

新建安全组,放通8080端口

激活Jenkins

Jenkins插件

Jenkins全局工具配置

自动构建Springboot项目

准备好Springboot项目

Jenkins新建任务和配置


服务器准备

可以选择阿里云、腾讯云、华为云等云服务器,更便捷,当然也可以使用本地电脑开虚拟机。

阿里云活动地址、腾讯云活动地址、华为云活动地址(点击可访问)

本人购买的阿里云服务器配置为:2 vCPU 2 GiB 3Mbps,即阿里云的优惠活动最低配置的服务器,操作系统选择的centos7.9

当然腾讯云和华为云也不错,可以按需或自己的喜好购买。华为云对新用户有性价比超高的2核4G的配置,不过需要抢。

腾讯云的硬盘更大,带宽更大价格也很实惠,并且是新老客户都可以买的

如果只是个人用来玩一下或者只是有个把个人项目,那就选择一个2核2g或者2核4g的服务器就可以了,即上述最低配置的服务器,当然如果是小团队要使用或者项目比较多,那建议4g/8g起步。

选择合适自己的服务器购买后,等待云服务器完成配置,然后你就可以在你的控制台里面看到自己的云服务器实例了,这里可以自行参考对于云服务厂家的说明书来。

Docker安装

yum 包更新到最新
yum update
设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装docker
yum install docker-ce  
OR
yum install <自己的版本>  # 例如:sudo yum install docker-ce-17.12.0.ce
启动和开机启动
systemctl start docker
systemctl enable docker
验证安装是否成功
docker version

通过以上命令基本就可以完成docker的安装,本人实操通过,如遇到问题就对于查找相关的解决方案,这里也贴一下docker官网的文档:Get Docker | Docker Docs

Jenkins安装

Jenkins的安装可以参考官网的文档来,安装Jenkins,这里我列出我的安装过程。

拉取镜像
docker pull jenkins/jenkins:lts

这里我使用的是Jenkins的长期支持镜像jenkins/jenkins:lts,但官网的建议是:

使用的Docker映像是jenkinsci/blueocean image(来自 the Docker Hub repository)。 该镜像包含当前的长期支持 (LTS) 的Jenkins版本 (可以投入使用) ,捆绑了所有Blue Ocean插件和功能。这意味着你不需要单独安装Blue Ocean插件。

也就是说jenkinsci/blueocean是长期支持版本+Blue Ocean插件,我由于安装后才看官方文档就没有换了,后续我自行安装了Blue Ocean插件。

创建映射目录
mkdir -p /data/jenkins

这里映射目录你可以按照容器里面的目录/var/jenkins_home来创建也行,自定义也行,看你们自己的规范

运行镜像
docker run -u root -d --name=jenkins -p 8080:8080 -p 50000:50000 -v /data/jenkins/:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker jenkins/jenkins:lts

指定-u root可以解决权限不足的问题,映射docker命令可以解决Jenkins在构建镜像时提示docker not found的问题

运行出错

如果运行出错,可以通过docker logs查看运行日志,我这里有遇到下面的错误

[root@iZ7us1hw0oqmxZ ~]# docker logs jenkins
touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
修正权限

遇到上面的错误后通过如下命令授权给Jenkins容器内用户权限(Jenkins容器内userid=1000)

chown -R 1000 /data/jenkins/
重新运行镜像
docker run -u root -d --name=jenkins -p 8080:8080 -p 50000:50000 -v /data/jenkins/:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker jenkins/jenkins:lts

# 查看容器是否已在运行
docker ps
新建安全组,放通8080端口

由于我们购买的云服务器,一般默认都是关闭所有端口的访问的(除了22端口),所以我们需要进入服务器实例,找到安全组去配置规则

将入方向的8080端口放通,如下:

这样就可以在浏览器通过服务器公网ip:8080访问到你部署的Jenkins了

激活Jenkins

浏览器访问ip:8080 获取Jenkins密钥,可以利用docker logs jenkins日志获取 也可以查看指定文件/data/jenkins/secrets/initialAdminPassword

 

Jenkins插件

使用Jenkins密钥进入登录Jenkins后,默认会提示安装一下常用插件,这里可以选择安装一下,然后就是让创建一个管理员用户,可自行按照提示填写,我这里没有截图,应该没什么问题,这里主要对几个常用Jenkins插件和相关配置做个说明。

进入Jenkins主界面后,插件安装在系统管理(System Manager)里面的插件管理(Plugin),我这里说的基本都是中文,但有可能你进去看到的是英文的界面,自行转化一下。

 

好像是安装了Blue Ocean插件变中文了的,当然实际上是这个插件的功劳Localization: Chinese (Simplified),如果你想要中文显示,可以安装这个插件。

  • Localization: Chinese (Simplified)版本 :Jenkins Core 及其插件的简体中文语言包

  • Blue Ocean:一个美观、功能强大的CI/CD工具,可以在UI界面上配置和管理CI/CD流水线

  • Gitee Plugin:集成gitee需要用到

  • Git Parameter Plug-In:git参数插件,比如想指定构建分支就可以用它来做

  • Role-based Authorization Strategy版本:角色权限控制策略插件,当有多个账号需要控制不同角色账号的操作权限时可以用它来做

  • SSH:ssh插件,有远程连接就需要用它。但是!!!它已经提示有漏洞了,并且提示了3年多还是没有更新,当前最新版本的插件还是5年前的,所以一定不要用它了,需要的话用别的插件代替(代替插件我暂时没有研究,后续如有用到我补充进来)

 

上面的插件的使用可以点击链接进去看看文档怎么写的,或者直接百度相应插件名称有很多教程,这里就不赘述了

Jenkins全局工具配置

安装完上面的插件后,还需要对Jenkins做一个全局工具的配置,需要运行Java程序,肯定少不了Jdk,Maven等,所以我们需要安装配置它们。

选择新增JDK,命个名,例如JDK1.8,选择对应版本,选择从java.sun.com安装,并输入自己的Oracle账号密码,下面截图有红色报错请忽略,正常不会报错的。

 

滑动界面到下面,选择Maven安装,选择合适的版本,从Apache安装

 如果网络不好也可以下载好安装包上传服务器,选择解压.zip/.tar.gz安装

 

点击保存,Jenkins就会自动安装JDK,Maven了。

自动构建Springboot项目

准备好Springboot项目

可以使用idea或者在https://start.spring.io官网生成一个demo(现在已经不支持生成Java8的了,可以生成后自己再改版本就好了),或者自己写一个demo,或者从其他项目复制一份,随便改改,方法多种多样,这个相信大家都没有问题。

这里主要是要通过maven插件或者通过Dockerfile描述文件将项目打包成镜像,我这里是通过Dockerfile文件来打包的,再项目根目录新建Dockerfile文件,内容如下:

FROM openjdk:8-jdk-alpine
MAINTAINER liangchen
ENV TZ=Asia/Shanghai
#这里时区相关命令注释是因为构建慢,这个命令是可用的
#RUN apk update \
#    && apk add tzdata \
#    && echo "${TZ}" > /etc/timezone \
#    && ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime \
#    && rm /var/cache/apk/*
# /tmp 目录作为容器数据卷目录,SpringBoot内嵌Tomcat容器默认使用/tmp作为工作目录,任何向 /tmp 中写入的信息不会记录进容器存储层,从而保证容器存储层的无状态化
# 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
VOLUME /tmp
ADD target/jenkinsdemo-0.0.1-SNAPSHOT.jar app.jar
# 设置随机数生成器的算法为 /dev/./urandom,以提高随机性和性能
ENTRYPOINT ["java","-Xmx128m","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar","--spring.profiles.active=test"]
EXPOSE 8081

 

面时区命令我注释了,但实际是可用的,相关Docker时区问题可以看看这篇文章:Docker时区问题,看这一篇就够了-CSDN博客

Jenkins新建任务和配置

新建任务,起个名字,一般用项目名,选择构建一个自由风格的软件项目

配置Git源码地址,账号密码

构建步骤,选择调用顶层Maven目标,使用maven给java项目编译打包,这里的maven版本就是上面配置的版本

 这个时候就可以保存,点击构建,测试是否能正常打包了,点击构建历史->控制台输出,查看构建日志,如出现如下内容则为正常

注意:这里构建可能很慢,是从maven默认的仓库下载的依赖,可以更改maven的默认中央仓库为阿里巴巴的maven仓库,找到服务器/data/jenkins/tools/hudson.tasks.Maven_MavenInstallation/maven3.6.3/conf目录,在settings.xml里面加入如下镜像地址:

 <mirrors>
    <mirror>
         <id>nexus-aliyun</id>
         <mirrorOf>central</mirrorOf>
         <name>Nexus aliyun</name>
         <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
  </mirrors>

之后构建就会从aliyun下载依赖了,速度快上10倍。

然后回到任务配置界面,再新增构建步骤

脚本内容,根据需要修改

#进入到jenkins的项目工作目录
cd /var/jenkins_home/workspace/jenkinsdemo
#停止容器 || true表示执行失败继续往下执行,避免第一次没有该容器执行失败
docker stop jenkinsdemo || true
#删除容器
docker rm jenkinsdemo || true
#删除镜像
docker rmi jenkinsdemo || true
#docker构建打包生成镜像
docker build -t jenkinsdemo .
#运行镜像
docker run -d -p 8081:8081 --name jenkinsdemo jenkinsdemo:latest

保存,再次构建,正常的话就会是这样的日志。

至此构建部署完毕,可以通过浏览器访问ip:8081,测试是否能访问到项目。

 完美!嗯?完美吗?当然不,还有很多可以优化的地方,但这里至少从0-1了,把基本的架子搭建起来了,后续再来分享我优化的地方,比如实现提交代码自动构建,比如实现构建通知,比如通过域名来访问不暴露ip端口等等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1323010.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

el-form与el-upload结合上传带附件的表单数据(前端篇)

1.写在之前 本文前端采用Vue element-plus技术栈&#xff0c;前端项目参考yudao-ui-admin-vue3项目与Geeker-Admin项目。 这篇文章是el-form与el-upload结合上传带附件的表单数据&#xff08;后端篇&#xff09;-CSDN博客姐妹篇&#xff0c;后端篇文章主要讲的是后端的实现逻…

限流原理与实践:固定窗口、滑动窗口、漏桶与令牌桶解析

方案一、固定窗口限流算法 这里我们通过一个 demo 来介绍固定窗口限流算法。 创建一个 FixWindowRateLimiterService 类。 Service public class FixWindowRateLimiterService {Resourceprivate StringRedisTemplate stringRedisTemplate;private static final DefaultRedisSc…

新手上路:自动驾驶行业快速上手指南

文章目录 1.自动驾驶技术的发展1.1 工业革命驱动自动驾驶技术发展1.2 想象中的未来&#xff1a;科幻作品中的自动驾驶汽车1.3 自动驾驶技术萌芽与尝试1.4 百花争鸣&#xff1a;自动驾驶科技巨头与创业公司并进 2.个人开发者&#xff0c;如何玩转自动驾驶&#xff1f;2.1 灵活易…

Opencv实验合集——实验六:模板匹配

1.概念 模板匹配旨在在图像中找到与给定模板最相似的部分。其核心思想是通过滑动模板&#xff0c;计算每个位置与模板的相似性&#xff0c;然后找到最匹配的位置。这一过程常涉及选择匹配度量方法&#xff0c;如平方差匹配、归一化平方差匹配、相关性匹配等。模板匹配在目标检…

git缓存区、本地仓库、远程仓库的同步问题(初始化库无法pull和push)

git新建库与本地库同步 gitee使用教程&#xff0c;git的下载与安装接不在叙述了。 新建远程仓库 新建远程仓库必须要使用仓库提供的api&#xff0c;也就是仓库门户网站&#xff0c;例如gitee&#xff0c;github&#xff0c;gitlab等。在上图中使用gitee网址中新建了一个test仓…

【无语】Microsoft Edge 浏览器不显示后台返回的数值数据

Microsoft Edge 禁用 JSON 视图 写在前面禁用 JSON 视图 写在前面 遇到一个有意思的事情&#xff0c;在用 Microsoft Edge 浏览器发送请求测试时发现&#xff0c;后端返回的数值数据没有正常展示&#xff0c;而是类似查看源码的结果&#xff0c;只显示了一个行号1&#xff0c;…

SpringMVC01

SpringMVC 1. 学习⽬标2. 什么叫MVC&#xff1f;3. SpringMVC 框架概念与特点4. SpringMVC 请求流程5. Spring MVC 环境搭建6. URL 地址映射配置7. 参数绑定8. JSON 数据开发JSON普通数组步骤1:pom.xml添加依赖步骤2&#xff1a; 修改配置⽂件步骤3. 注解使⽤ 1. 学习⽬标 2. 什…

Android Studio: 解决Gradle sync failed 错误

文章目录 1. 前言2. 错误情况3. 解决办法3.1 获取gradle下载地址3.2 获取gradle存放目录3.3 替换并删除临时文件3.4 触发Try Again 4. 执行成功 1. 前言 今天调试项目&#xff0c;发现新装的AS&#xff0c;在下载gradle的过程中&#xff0c;一直显示连接失败&#xff0c;Gradl…

Zookeeper-快速开始

Zookeeper介绍 简介&#xff1a;ZooKeeper 是一个开源的分布式协调框架&#xff0c;是Apache Hadoop 的一个子项目&#xff0c;主要用来解决分布式集群中应用系统的一致性问题。 设计目标&#xff1a;将那些复杂且容易出错的分布式一致性服务封装起来&#xff0c;构成一个高效…

数据可视化---饼图、环形图、雷达图

类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统计学检验箱…

linux:掌握systemctl命令控制软件的启动和关闭、掌握使用ln命令创建软连接

掌握使用systemctl命令控制软件的启动和关闭 一&#xff1a;systemctl命令&#xff1a; Linux系统很多软件(内置或第三方)均支持使用systemctl命令控制:启动停止、开机自启 能够被systemctl管理的软件一般也称之为:服务 语法: systemctl | start | stop | status | enable …

JDK各个版本特性讲解-JDK17特性

JDK各个版本特性讲解-JDK17特性 一、JAVA17概述二、语法层面的变化1.JEP 409&#xff1a;密封类2.JEP 406&#xff1a;switch模式匹配&#xff08;预览&#xff09; 三、API层面变化1.JEP 414&#xff1a;Vector API&#xff08;第二个孵化器&#xff09;2.JEP 415&#xff1a;…

10000字讲解TCP协议(确认应答,超时重传,三次握手,四次挥手等等众多机制)以及UDP协议(UDP报文,校验和)

文章目录 UDP协议&#xff1f;什么是校验和&#xff1f;基于UDP的应用层协议(了解) TCP协议确认应答(可靠性机制)超时重传(可靠性机制)连接管理(可靠性机制)三次握手(重点)四次挥手(重点) 三次握手和四次挥手时客户端和服务器的状态滑动窗口(效率机制)流量控制(效率机制)窗口探…

【论文笔记】动态蛇卷积(Dynamic Snake Convolution)

精确分割拓扑管状结构例如血管和道路&#xff0c;对医疗各个领域至关重要&#xff0c;可确保下游任务的准确性和效率。然而许多因素使分割任务变得复杂&#xff0c;包括细小脆弱的局部结构和复杂多变的全局形态。针对这个问题&#xff0c;作者提出了动态蛇卷积&#xff0c;该结…

腾讯云消息队列11月产品月报 | RocketMQ 5.x 国际站上线

2023年 11月动态 消息队列 RocketMQ 版 1、5.x 形态国际站上线 国际站上线 5.x 集群全系列&#xff0c;第一批先开放新加坡和硅谷地域。 控制台链接&#xff1a;https://console.tencentcloud.com/trocketmq 2、 无感迁移能力 支持用户白屏化操作&#xff0c;将自建的 Roc…

搭建 ElasticSearch 集群环境

安装基础环境 我们用虚拟机创建出3台机器&#xff0c;查看centos版本为7.9 [roots1 ~]# cat /etc/centos-release CentOS Linux release 7.9.2009 (AltArch)下载相关命令 yum -y install vim* yum -y install net-tools yum -y install lsof yum -y install wget yum -y ins…

SpringBoot知识点回顾01

Spring是为了解决企业级应用开发的复杂性而创建的&#xff0c;简化开发。 Spring是如何简化Java开发的 为了降低Java开发的复杂性&#xff0c;Spring采用了以下4种关键策略&#xff1a; 1、基于POJO的轻量级和最小侵入性编程&#xff0c;所有东西都是bean&#xff1b; 2、通…

Tomcat 部署论坛

一、安装好mysql数据库和jdk之后 开始部署论坛 用Navicat Premium 15连接mysql数据库并创建jforum数据库 下载版本 点击安装选择minninum点击下一步 点击一下一步 选择默认安装路径 安装验证&#xff0c;在安装完毕且启动Apache Tomcat&#xff0c;通过浏览器访问tomcat的80…

Google Earth Engine谷歌地球引擎GEE批量下载ImageCollection遥感影像数据合集的方法

本文介绍在谷歌地球引擎GEE中&#xff0c;批量导出、下载ee.ImageCollection格式的多张栅格遥感影像数据的简便方法。 本文是谷歌地球引擎&#xff08;Google Earth Engine&#xff0c;GEE&#xff09;系列教学文章的第十九篇&#xff0c;更多GEE文章请参考专栏&#xff1a;GEE…

[最后一个月征稿、ACM独立出版】第三届密码学、网络安全和通信技术国际会议(CNSCT 2024)

第三届密码学、网络安全和通信技术国际会议&#xff08;CNSCT 2024&#xff09; 2024 3rd International Conference on Cryptography, Network Security and Communication Technology 一、大会简介 随着互联网和网络应用的不断发展&#xff0c;网络安全在计算机科学中的地…