0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Jenkins的安装教程

马哥Linux运维 ? 来源:博客园 ? 2025-02-06 10:04 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1. Jenkins是什么?

Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。

2.什么是持续集成(CICD)

因为开发部门同时维护多个版本,多个版本的发布,测试需要大量人力,所以要有一个专业的持续集成工具来管理持续重复的工作。

个人理解,说白了就是把代码测试、打包、发布等工作交给一些工具来自动完成。这样可以提高效率,减少失误,开发人员只需要关心开发和提交代码到Git就可以了。

3. Jenkins的安装

(1)准备条件

安装JDK

下载JDK压缩包,并上传至Linux某个目录下解压。

. 配置jdk的环境变量

#进入/etc/profile配置文件
vim /etc/profile

. 将以下代码填入到profile文件内底

export JAVA_HOME=/usr/wubin/jdk11
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

. 使配置生效

source /etc/profile

. 检测java环境信息

javac

输入javac后出现以下信息则安装jdk成功!

5946713c-e39c-11ef-9310-92fbcf53809c.png

(2)安装Jenkins

1. 下载jenkins

wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war

2. 启动jenkins

# 使用nohup命令启动 nohup 当虚拟机黑屏时 也会运行 日志—>输出到jenkins.log & 后台运行

nohup java -jar /usr/wubin/jenkins.war  --httpPort=8777 --httpsPort=8778 > /usr/wubin/jenkins.log 2>&1 &

3. 使用tail命令查看启动日志,日志中会输出jenkins密码

595abdf4-e39c-11ef-9310-92fbcf53809c.png

4. 通过浏览器访问jenkins(端口号必须为8777)

http://你的ip:8777

5979738e-e39c-11ef-9310-92fbcf53809c.png

点击安装推荐的插件

598da138-e39c-11ef-9310-92fbcf53809c.png

5992cbf4-e39c-11ef-9310-92fbcf53809c.png

59ab5886-e39c-11ef-9310-92fbcf53809c.png

(3)Jenkins中配置JDK路径

jenkins-》全局工具配置-》JDK-》新增JDK

59c369da-e39c-11ef-9310-92fbcf53809c.png

59d6cde0-e39c-11ef-9310-92fbcf53809c.png

(4)Jenkins忘记密码的解决方案

5a06afa6-e39c-11ef-9310-92fbcf53809c.png

4. 集成Git

为了Jenkins能够拉取代码,需要安装Git环境和jenkins对应的Git插件

(1) CentOS 7 上安装Git环境

# 安装
$ yum install git -y
# 查看版本
$ git --version

复制

(2) Jenkins安装Git插件

5a25073a-e39c-11ef-9310-92fbcf53809c.png

(3) Jenkins配置Git环境

此处无需在jenkins中配置Git环境,采用默认生成的即可

5a414594-e39c-11ef-9310-92fbcf53809c.png

(4) Gitee上任意建一个仓库

5a51a736-e39c-11ef-9310-92fbcf53809c.png

5a68e93c-e39c-11ef-9310-92fbcf53809c.png

(5) 测试凭据是否能够使用

jenkins-》新建任务-》自由风格项目

5a812448-e39c-11ef-9310-92fbcf53809c.png

5a960e08-e39c-11ef-9310-92fbcf53809c.png

5aa39b18-e39c-11ef-9310-92fbcf53809c.png

5abaa966-e39c-11ef-9310-92fbcf53809c.png

5ad96964-e39c-11ef-9310-92fbcf53809c.png

5aeeadb0-e39c-11ef-9310-92fbcf53809c.png

进入jenkins的工作空间查看文件是否拉取下来,所有拉取的文件都会存放在jenkins工作空间中

5af566be-e39c-11ef-9310-92fbcf53809c.png

到这一步用户名和密码方式的凭证已经打通Git

5. 凭证配置

凭据就是用来存储需要密文保护的数据库密码、Gitee密码信息、Docker私有仓库密码等,以便 Jenkins可以和这些第三方的应用进行交互。

1. 凭证插件安装Credentials Binding

5b23fad8-e39c-11ef-9310-92fbcf53809c.png

该插件默认在一开始就会被安装,安装后在jenkins-》系统管理-》安全栏目会出现Manage Credentials选项,若没有需要安装插件并重启。

5b3be3d2-e39c-11ef-9310-92fbcf53809c.png

5b5139a8-e39c-11ef-9310-92fbcf53809c.png

5b61e9b0-e39c-11ef-9310-92fbcf53809c.png

5b86d356-e39c-11ef-9310-92fbcf53809c.png

5ba1eeca-e39c-11ef-9310-92fbcf53809c.png

5bbd57dc-e39c-11ef-9310-92fbcf53809c.png

5bdceaac-e39c-11ef-9310-92fbcf53809c.png

5bed0b94-e39c-11ef-9310-92fbcf53809c.png

5bfaa970-e39c-11ef-9310-92fbcf53809c.png

5c065e46-e39c-11ef-9310-92fbcf53809c.png

6. Maven集成

在jenkins上发布Java项目时需要使用Maven来进行构建打包(Gradle项目则需要安装配置Gradle)

(1) 下载安装

# 找一个目录存放maven
cd /usr/wubin/

# 从阿里云上下载maven安装包
wget https://mirrors.aliyun.com/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

# 解压
tar -zxvf apache-maven-3.6.3-bin.tar.gz

# 当前maven的安装目录为:
/usr/wubin/
apache-maven-3.6.3

(2) 环境配置

vi /etc/profile

在最后面JDK配置上作出一些更改
export MAVEN_HOME=
/usr/wubin/
apache-maven-3.6.3
 export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH

复制

(3) 使配置生效并查看安装情况

source /etc/profile
mvn -version

(4) Jenkins配置Maven

5c1ee1fa-e39c-11ef-9310-92fbcf53809c.png

(5) 安装Maven插件

5c3c5532-e39c-11ef-9310-92fbcf53809c.png

(6) 在/data/software目录下新建一个repository文件夹,用来作为maven的仓库

$ cd /usr/wubin
$ mkdir repository

复制

(7) 使用root账户修改Maven的settings.xml文件(指定仓库目录和阿里云镜像)


  
             
  /data/software/repository
  
  
     
    
      aliyun-maven
      central
      aliyun maven mirror
      http://maven.aliyun.com/nexus/content/groups/public/
    
  
    ...
    ...

复制

(8) Maven测试项目构建

接下来的步骤是将java项目传到Gitee上供jenkins拉取打包,如果运维同学不懂Java代码,可以直接将我的Git项目fork或采用gitlab 等其他方式进行拉取。

新建Maven项目

5c4e9bde-e39c-11ef-9310-92fbcf53809c.png

在码云上建一个同名的git项目

5c55e9ca-e39c-11ef-9310-92fbcf53809c.png

使用Git上传到码云

使用git bash命令将项目初始化,无论是传到Gitee、GitHub、GitLab、Codeup步骤一样,如果对Git的安装部署不熟悉

# 进入到本地的项目文件夹
$ cd existing_folder
# 初始化仓库
$ git init

# 添加文件至工作区并提交
$ git add .
$ git commit -m "first commit"

# 关联Gitee远程仓库
$ git remote add origin https://gitee.com/nobug8/it235-jenkins-jar.git

# 将本地仓库推送到远程仓库的master分支,此处会弹出用户名密码交互
$ git push -u origin master

## 如果push报错可以先拉取一下,会有新的gitee生成的文件拉下来,然后重新添加提交并push
$ git pull origin master --allow-unrelated-histories
$ git add .
$ git commit -m "拉取下来合并后再次提交"
$ git push -u origin master

复制

5c7887a0-e39c-11ef-9310-92fbcf53809c.png

(9) Jenkins添加Maven项目任务

①. 新建任务

5c8ef79c-e39c-11ef-9310-92fbcf53809c.png

②. 编写Maven编译命令

5ca4a920-e39c-11ef-9310-92fbcf53809c.png

③. 构建并查看控制台日志

保存后,点击立即构建,然后进入日志控制台查看日志

5cb40e60-e39c-11ef-9310-92fbcf53809c.png

从日志可以看到代码已经在拉取了,而且走的事阿里云仓库,第一次拉取过程会比较长。

通过查看/data/software/repository可以看到有存放拉取的jar包,通过这2个证据可以证明settings.xml文件配置成功且有效

5ce0f8d0-e39c-11ef-9310-92fbcf53809c.png

构建成功后查看jenkins的workspace目录下的jar包

5d03c02c-e39c-11ef-9310-92fbcf53809c.png

5d2e7574-e39c-11ef-9310-92fbcf53809c.png

到此Maven集成完毕

配置Post Steps,选中执行shell

5d4c504e-e39c-11ef-9310-92fbcf53809c.png

5d5f81dc-e39c-11ef-9310-92fbcf53809c.png

7. 配置SSH免密登录

由于jenkins构建消耗内存极大,一般jenkins是一台单独的工具机器,Java项目一般在其他的机器上,这里我重新安装一台虚拟机

应用服务器信息

IP:192.168.223.129

JDK:1.8

user:root

部署路径:/data/app/my-boot

端口:9010

免密登录主要是方便jenkins服务器192.168.223.128的root用户—》应用服务器192.168.223.129的root用户上的jar包拷贝,部署本就是jar包拷贝的过程

在192.168.223.128机器上使用root用户生成秘钥注意此处是root用户

$ ssh-keygen -t rsa
# 3次回车

复制

运行后会在当前用户的根目录生成一个.ssh文件夹

5d70537c-e39c-11ef-9310-92fbcf53809c.png

ssh文件夹中的文件描述

id_rsa: 生成的私钥文件

id_rsa.pub:生成的公钥文件

接下来需要将公钥导入到认证文件中

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

复制

如果希望ssh公钥生效需满足至少下面两个条件:

.ssh目录的权限必须是700

.ssh/authorized_keys文件权限必须是600

给对应文件授权

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

复制

将authorized_keys文件拷贝到另一台应用服务器的root用户.ssh目录下

# 在应用服务器(192.168.223.129)上用root用户创建/root/.ssh文件夹  mkdir -p /root/.ssh

# 在jenkins服务器(192.168.223.128)上将pub公钥文件拷贝到应用服务器的.ssh目录下

scp -p ~/.ssh/id_rsa.pub root@192.168.223.129:/root/.ssh/authorized_keys

复制

在jenkins192.168.223.128服务器上进行免密连接测试

# 在jenkins服务器的/root/目录下创建filetest文件,并拷贝到应用服务器
$ cd ~/
$ touch filetest
$ scp -p filetest root@192.168.223.129:/root/filetest
# 进入到应用服务器(192.168.223.129),检查/root目录下是否出现filetest

# 在jenkins服务器上使用ssh进行免密连接测试,成功后会出现Last Login的提示
$ ssh root@192.168.223.129
Last login: Sun Sep 20 21:53:03 2020
$ exit

复制

到此免密登录和拷贝实现成功,为接下来jar包部署提供了快捷的帮助

8. 编写Jenkins发布脚本

5d7aa246-e39c-11ef-9310-92fbcf53809c.png

注意下面代码第6行代码server_ips=”需要部署到的机器ip”

#!/bin/bash

echo "部署的目录和项目名称"
DIR="/data/app"
projectName="my-boot"

echo "待部署的应用服务器,可多台"
server_ips="192.168.223.139"
for server_ip in ${server_ips[@]}
do

echo "ssh连接进行备份操作"
ssh -Tq -oStrictHostKeyChecking=no root@${server_ip} <

9. 编写应用启动脚本

在/data/app/my-boot目录下创建启动脚本start.sh

$ touch start.sh
$ vi start.sh
# 将下面代码粘贴到start.sh中
#!/bin/bash
set -e #任何命令出错就退出
set -o pipefail

APP_ID=my-boot
APP_DIR="/data/app"

nohup java -jar ${APP_DIR}/${APP_ID}/${APP_ID}.jar > release_out.log &
start_ok=false
if [[ $? = 0 ]];then
        sleep 3
        tail -n 10 release_out.log
        sleep 5
        tail -n 50 release_out.log
fi
aaa=`grep "Started" release_out.log | awk '{print $1}'`
if [[ -n "${aaa}" ]];then
    echo "Application started ok"
    exit 0
else
    echo "Application started error"
    exit 1
fi

在/data/app/my-boot目录下创建停止脚本stop.sh

$ touch stop.sh
$ vi stop.sh
# 将下面代码粘贴到stop.sh中
#!/bin/bash

APP_ID=my-boot
ps aux | grep ${APP_ID} | grep -v "grep" | awk '{print "kill -9 "$2}' | sh

并进行启动和停止测试,查看日志输出是否正常

将下述启动代码配置jenkins中

sh $DIR/${projectName}/stop.sh
sh $DIR/${projectName}/start.sh

访问并测试代码是否生效

如果是虚拟机则需要给防火墙添加9010端口

$ su root
# 开启防火墙9010端口
$ firewall-cmd --zone=public --add-port=9010/tcp --permanent
# 使配置生效
$ firewall-cmd --reload

复制

修改代码返回值,提交至Gitee,并再次进行构建发布,访问http://192.168.223.129:9010查看结果是否更新

5d9a4bb4-e39c-11ef-9310-92fbcf53809c.png

链接:https://www.cnblogs.com/smile635664087/p/16922110.html

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    20

    文章

    2989

    浏览量

    110749
  • 开源
    +关注

    关注

    3

    文章

    3754

    浏览量

    43968
  • 代码
    +关注

    关注

    30

    文章

    4905

    浏览量

    70957
  • 脚本
    +关注

    关注

    1

    文章

    400

    浏览量

    28647

原文标题:9. 编写应用启动脚本

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    #硬声创作季 Java项目实战:项目部署(jenkins安装2)

    JAVA编程语言
    Mr_haohao
    发布于 :2022年09月08日 17:08:55

    CentOS7配置Tomcat的安装和整合Jenkins

    第七章----CentOS7 配置 Tomcat 整合Jenkins自动部署
    发表于 03-29 11:53

    Jenkins空间不足怎么办

    Jenkins空间问题
    发表于 08-14 13:33

    Jenkins用户界面的相关资料分享

    默认情况下,Fuego使用Jenkins持续集成系统来管理板子,测试,日志和测试结果。Jenkins用户界面是基于Web的。此页面显示了Jenkins界面中不同页面的几个屏幕截图。通过此界面,您可
    发表于 12-21 06:56

    jenkins是什么?有何应用

    最近打算研究下持续集成,jenkins是一款功能很强大的解决方案,实践出真知,边实践变了解,实战了下jenkins的应用,顺便提高下工作效率下文及下图提到的PBX即为我要监控的嵌入式设备
    发表于 12-21 08:21

    jenkins简单的使用教程_jenkins安装与配置

    jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。开发第一步、提交第二步、编译第三步、测试第四步、发布第五步
    发表于 12-20 18:40 ?8832次阅读
    <b class='flag-5'>jenkins</b>简单的使用教程_<b class='flag-5'>jenkins</b><b class='flag-5'>安装</b>与配置

    jenkins自动化部署

    本文详细介绍Jenkins的简单使用—jenkins自动化部署。
    的头像 发表于 02-06 11:27 ?5014次阅读
    <b class='flag-5'>jenkins</b>自动化部署

    Jenkins详细安装与构建部署使用教程

    本文详细介绍了Jenkins安装与构建部署使用教程。Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins是基于Java开发的一种持
    发表于 02-06 13:47 ?1840次阅读
    <b class='flag-5'>Jenkins</b>详细<b class='flag-5'>安装</b>与构建部署使用教程

    Jenkins是什么_Jenkins常用功能_jenkins的使用总结

    本文详细回答了Jenkins是什么,Jenkins常用功能以及jenkins的使用总结。Jenkins 是一个可扩展的持续集成引擎。Jenkins
    发表于 02-06 14:44 ?2.9w次阅读
    <b class='flag-5'>Jenkins</b>是什么_<b class='flag-5'>Jenkins</b>常用功能_<b class='flag-5'>jenkins</b>的使用总结

    基于Jenkins远程执行shell命令

    打开Jenkins的“系统管理>插件管理”,选择“可选插件”,在输入框中输入“Publish over SSH”进行搜索,如果搜索不到可以在“已安装”里确认是否已经安装过。
    的头像 发表于 05-05 20:13 ?5957次阅读
    基于<b class='flag-5'>Jenkins</b>远程执行shell命令

    Jenkins+Docker一键自动化部署SpringBoot最简流程

    简述实现步骤:在docker安装jenkins,配置jenkins基本信息,利用Dockerfile和shell脚本实现项目自动拉取打包并运行。
    的头像 发表于 11-23 10:16 ?1644次阅读

    部署Jenkins服务时如何保障服务的高可用性呢?

    现在的企业很多都在用Jenkins做持续集成,各个业务端都依靠Jenkins,vivo Devops也是使用Jenkins来进行持续构建,部署Jenkins服务时如何保障服务的高可用变
    的头像 发表于 02-14 17:02 ?3795次阅读

    Jenkins部署启动案例

    电子发烧友网站提供《Jenkins部署启动案例.zip》资料免费下载
    发表于 06-15 14:53 ?0次下载
    <b class='flag-5'>Jenkins</b>部署启动案例

    提升jenkins构建效率的方法

    最近使用 jenkins 部署一个项目的时候,总是构建失败,卡在了git clone这一步骤,经过一系列的分析,发现jenkins执行git clone时,会先下载(或构建).git文件的。
    的头像 发表于 07-18 09:40 ?1727次阅读
    提升<b class='flag-5'>jenkins</b>构建效率的方法

    Jenkins+Docker一键自动化部署SpringBoot应用最精简流程

    简述实现步骤:在docker安装jenkins,配置jenkins基本信息,利用Dockerfile和shell脚本实现项目自动拉取打包并运行。
    的头像 发表于 11-06 16:27 ?2635次阅读
    <b class='flag-5'>Jenkins</b>+Docker一键自动化部署SpringBoot应用最精简流程