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

目录

服务器准备

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端口等等。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GitHub 如何修改 Fork from

如果你的仓库上面是 Fork from 的话&#xff0c;我们有什么办法能够取消掉这个 Fork from&#xff1f; 解决办法 GitHub 上面没有让你取消掉 Fork 的办法。 如果进入设置&#xff0c;在可见设置中也没有办法修改仓库的可见设置选项。 唯一的解决办法就是对你需要修改的仓库先…

景区气象站:旅游体验的新升级

随着科技的发展和人们生活水平的提高&#xff0c;越来越多的人选择在节假日或周末外出旅游&#xff0c;感受大自然的美好。然而&#xff0c;在享受大自然的同时&#xff0c;天气因素成为了影响旅游体验的关键因素之一。为了更好地服务游客&#xff0c;许多景区开始引入气象站&a…

Java 基础学习(十四)Map集合与Set集合

1 Map集合 1.1 Map接口 1.1.1 Map接口概述 Map接口是一种双列集合。Map的每个元素都包含一个键对象Key和一个值对象Value &#xff0c;键对象和值对象之间存在对应关系&#xff0c;这种关系称为映射&#xff08;Mapping&#xff09;。 Map接口中的元素&#xff0c;可以通过…

持续集成交付CICD:K8S 通过模板文件自动化完成前端项目应用发布

目录 一、实验 1.环境 2.GitLab 更新deployment文件 3.GitLab更新共享库前端项目CI与CD流水线 4.K8S查看前端项目版本 5.Jenkins 构建前端项目 6.Jenkins 再次构建前端项目 二、问题 1. Jenkins 构建CI 流水线报错 2. Jenkins 构建CI 流水线弹出脚本报错 3. Jenkins…

微软官宣放出一个「小模型」,仅2.7B参数,击败Llama2和Gemini Nano 2

就在前一阵谷歌深夜炸弹直接对标 GPT-4 放出 Gemini 之后&#xff0c;微软这两天也紧锣密鼓进行了一系列动作。尽管时间日趋圣诞假期&#xff0c;但是两家巨头硬碰硬的军备竞赛丝毫没有停止的意思。 就在昨日&#xff0c;微软官宣放出一个“小模型” Phi-2&#xff0c;这个 Ph…

构建智慧储能物联网,4G工业路由器远程监测在线管理

物联网技术的发展为智慧储能管理带来了革命性的变化。其中&#xff0c;4G工业路由器IR5000通过丰富的连接能力如串口RS485/232或网口的方式&#xff0c;实现了与储能现场各设备的连接&#xff0c;包括电表、电能检测器、防孤岛装置、BMS电池管理系统、监控服务器、储能控制器、…

K8s攻击案例:RBAC配置不当导致集群接管

01、概述 Service Account本质是服务账号&#xff0c;是Pod连接K8s集群的凭证。在默认情况下&#xff0c;系统会为创建的Pod提供一个默认的Service Account&#xff0c;用户也可以自定义Service Account&#xff0c;与Service Account关联的凭证会自动挂载到Pod的文件系统中。 …

JNDI注入Log4jFastJson白盒审计不回显处理

目录 0x00 前言 0x01 Maven 仓库及配置 0x02 JNDI 注入简介 0x03 Java-第三方组件-Log4J&JNDI 0x04 Java-第三方组件-FastJson&反射 0x05 白盒审计 - FastJson 0x06 白盒审计 - Log4j 0x07 不回显的处理方法 0x00 前言 希望和各位大佬一起学习&#xff0c;如果…

ubuntu推送本地仓库到coding

本教程提供在ubuntu系统下推送本地仓库到coding的指令&#xff0c;用于查阅 一、主要步骤有&#xff1a; 0.初始化仓库 git init 1.添加远程仓库 git remote add origin https://coding.git #修改自己仓库链接 &#xff08;命名仓库别名为origin&#xff09; 2.提交代码…

金融CRM有用吗?金融行业CRM有哪些功能

市场形式波诡云谲&#xff0c;金融行业也面临着资源体系分散、竞争力后继不足、未知风险无法规避等问题。金融企业该如何解决这些问题&#xff0c;或许可以了解一下CRM管理系统&#xff0c;和其提供的金融行业CRM解决方案。 金融行业是银行业、保险业、信托业、证券业和租赁业…

lv12 linux 内核移植 10

目录 1 内核概述 1.1 内核与操作系统 1.2 Linux层次结构 1.3 Linux内核特点 2 Linux内核源码结构 2.1 Linux内核源码获取 2.2 源码结构 3 Linux内核移植 3.1 在 Linux 官网下载 Linux 内核源码&#xff08;这里我们下载 linux-3.14.tar.xz&#xff09; 3.2 拷贝内核源…

centos开机自启动实战小案例

1.编写一个我们需要做事的脚本 #!/bin/bash # 打印 "Hello" echo "Hello,Mr.Phor" # 为了更好的能看到效果 我们把这段文本放置到一个文件中 如果重启能够看到 /a.txt文件 我们实验成功 echo "hahahahahahahaha" > /a.txt #每次开机 执行…

Windows/Linux双系统安装(双系统独立分盘)

一、固态硬盘、机械硬盘及U盘概述 &#xff08;一&#xff09;机械硬盘[1][3] 硬盘驱动器&#xff08;Hard Disk Drive&#xff0c;HDD&#xff09;&#xff0c;又称“机械硬盘”或“传统硬盘”&#xff0c;是电脑上使用刚性的旋转磁性盘片为基础的非依电性存储器&#xff0c;…

Eclipse_03_如何加快index速度

1. ini配置文件 -Xms&#xff1a;是最小堆内存大小&#xff0c;也是初始堆内存大小&#xff0c;因为堆内存大小可以根据使用情况进行扩容&#xff0c;所以初始值最小&#xff0c;随着扩容慢慢变大。 -Xmx&#xff1a;是最大堆内存大小&#xff0c;随着堆内存的使用率越来越高&a…

CentOS 8离线安装telnet

下载telnet rpm安装包&#xff0c;可从https://www.rpmfind.net/linux/rpm2html/search.php?querytelnet&submitSearch…&systemcentos&arch 根据自己的操作系统下载对应的包&#xff0c;这里以CentOS8为例,分别下载如下的rtp包 xinetd-2.3.15-24.el8.x86_64.rpm…

IDEA shorten command line介绍和JAR manifest 导致mybatis找不到接口类处理

如果类路径太长&#xff0c;或者有许多VM参数&#xff0c;程序就无法启动。原因是大多数操作系统都有命令行长度限制。在这种情况下&#xff0c;IntelliJIDEA将试图缩短类路径。最好选中 classpath file模式。 shorten command line 选项提供三种选项缩短类路径。 none&#x…

JMUer-网络新技术课程期末考试复习整理

✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​ &#x1f649;联系作者&#x1f648;by QQ&#xff1a;813942269&#x1f427; &#x1f308;致亲爱的读者&#xff1a;很高兴你…

智能优化算法应用:基于黑寡妇算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于黑寡妇算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于黑寡妇算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.黑寡妇算法4.实验参数设定5.算法结果6.参考文…

单片机应用实例:LED显示电脑电子钟

本例介绍一种用LED制作的电脑电子钟&#xff08;电脑万年历&#xff09;。其制作完成装潢后的照片如下图&#xff1a; 上图中&#xff0c;年、月、日及时间选用的是1.2寸共阳数码管&#xff0c;星期选用的是2.3寸数码管&#xff0c;温度选用的是0.5寸数码管&#xff0c;也可根据…

Vue+ElementUI前端添加展开收起搜索框按钮

1、搜索框添加判断 v-if"advanced" <el-form-item label"创建日期" v-if"advanced"><el-date-pickerv-model"daterangeLedat"size"small"style"width: 240px"value-format"yyyy-MM-dd"type&q…