大家好,又见面了,我是你们的朋友全栈君。今天我们将学习如何在Linux环境下使用Jenkins实现自动化部署项目。本教程主要讲解Jenkins的安装和使用方法。

1. Jenkins是什么?

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

2. 什么是持续集成(CI)?

因为开发部门同时维护多个版本,多个版本的发布,测试需要大量人力,所以要有一个专业的持续集成工具来管理持续重复的工作。个人理解,说白了就是把代码测试、打包、发布等工作交给一些工具来自动完成。这样可以提高效率,减少失误,开发人员只需要关心开发和提交代码到Git就可以了。

3. Jenkins的安装

(1)准备条件

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

配置jdk的环境变量:进入/etc/profile配置文件,使用vi编辑器打开/etc/profile文件,将以下代码填入到profile文件内底部。

设置JAVA_HOME、CLASSPATH和PATH环境变量。

使配置生效:执行source /etc/profile命令。

检测java环境信息:输入javac命令,如果出现以下信息则表示安装JDK成功!

```

Jenkins教程(自动化部署)

```

(2)安装Jenkins

1. 下载jenkins:使用wget命令下载jenkins.war文件。

```bash

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

```

2. 启动jenkins:使用nohup命令启动jenkins,当虚拟机黑屏时也会运行。日志输出到jenkins.log,后台运行。

```bash

nohup java -jar jenkins.war > jenkins.log 2>&1 &

```

至此,Jenkins已经成功安装并启动。接下来,你可以创建一个简单的任务来测试Jenkins是否能正常工作。

以下是重构后的内容:

1. 使用nohup命令启动Jenkins,并将日志输出到指定文件中。在日志中会输出Jenkins密码。

```bash

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

```

2. 使用tail命令查看启动日志,日志中会输出Jenkins密码。

3. 通过浏览器访问Jenkins(端口号必须为8777)。

```

http://你的ip:8777

```

4. 点击安装推荐的插件。

5. Jenkins教程(自动化部署)。

6. 在Jenkins中配置JDK路径。

```bash

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

```

7. Jenkins忘记密码的解决方案。

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

9. 在CentOS 7上安装Git环境。

```bash

$ yum install git -y

$ git --version

```

10. 在Jenkins中安装Git插件。

11. 在Jenkins中配置Git环境。

12. 在Gitee上任意建一个仓库。

13. 测试凭据是否能够使用。创建一个新的任务,选择自由风格项目。

Jenkins 自动化部署教程:

1. Jenkins 系统管理 -> 安全

2. Jenkins 自动化部署教程

3. Jenkins 自动化部署教程

4. Jenkins 自动化部署教程

5. Jenkins 自动化部署教程

6. Maven 集成

a. JenkinsMaven 下载安装

i. 找一个目录存放maven,例如:`cd /data/software/`

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

iii. 解压:`tar -zxvf apache-maven-3.6.3-bin.tar.gz`

iv. 当前maven的安装目录为:`/usr/local/java/apache-maven-3.6.3`

b. Maven环境配置

i. 编辑 `/etc/profile`,在JDK配置上作出一些更改,例如:

```

export MAVEN_HOME=/usr/local/java/apache-maven-3.6.3

export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH

```

ii. 使配置生效并查看安装情况:`source /etc/profile` 和 `mvn -version`

7. Jenkins 自动化部署教程(配置)

请根据提供的内容完成内容重构,并保持段落结构:

```xml

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

/data/software/repository

aliyun-maven

central

aliyun maven mirror

http://maven.aliyun.com/nexus/content/groups/public/

...

...

```

接下来的步骤是将Java项目传到Gitee上供Jenkins拉取打包。如果运维同学不懂Java代码,可以直接将我的Git项目fork或采用gitlab等其他方式进行拉取。新建Maven项目,参考Jenkins教程(自动化部署)。在码云上建一个同名的git项目,参考Jenkins教程(自动化部署)。使用Git上传到码云,进入git bash。

## Jenkins自动化部署教程(Maven项目)

### 1. 进入本地项目文件夹

```bash

$ cd existing_folder

```

### 2. 初始化仓库

```bash

$ git init

```

### 3. 添加文件至工作区并提交

```bash

$ git add .

$ git commit -m "first commit"

```

### 4. 关联Gitee远程仓库

```bash

$ git remote add origin https://gitee.com/nobug8/it235-jenkins-jar.git

```

### 5. 将本地仓库推送到远程仓库的master分支,此处会弹出用户名密码交互

```bash

$ git push -u origin master

```

如果push报错可以先拉取一下,会有新的gitee生成的文件拉下来,然后重新添加提交并push:

```bash

$ git pull origin master --allow-unrelated-histories

$ git add .

$ git commit -m "拉取下来合并后再次提交"

$ git push -u origin master

```

免密登录主要是为了方便在 Jenkins 服务器(192.168.223.128)的 root 用户和应用服务器(192.168.223.129)的 root 用户之间拷贝 jar 包。部署本质上就是将 jar 包从一个地方拷贝到另一个地方。

首先,在 Jenkins 服务器(192.168.223.128)上使用 root 用户生成 SSH 密钥。请确保使用 root 用户执行以下命令:

```bash

$ ssh-keygen -t rsa

```

运行后,会在当前用户的根目录生成一个名为 `.ssh` 的文件夹。接下来,需要将公钥导入到认证文件中。请执行以下命令:

```bash

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

```

如果希望 SSH 公钥生效,需要满足至少以下两个条件:

1. 确保 `.ssh` 文件夹存在:

```bash

$ touch ~/.ssh

```

2. 给对应的文件授权:

```bash

$ chmod 700 ~/.ssh

$ chmod 600 ~/.ssh/authorized_keys

```

然后,在应用服务器(192.168.223.129)上用 root 用户创建 `/root/.ssh` 文件夹:

```bash

$ mkdir -p /root/.ssh

```

接着,在 Jenkins 服务器(192.168.223.128)上将 pub 公钥文件拷贝到应用服务器的 `.ssh` 目录下:

```bash

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

```

最后,在 Jenkins 服务器(192.168.223.128)上进行免密连接测试。首先,在 Jenkins 服务器的 `/root/` 目录下创建一个名为 `filetest` 的文件,并将其拷贝到应用服务器:

```bash

$ cd ~/ $ touch filetest $ scp -p filetest root@192.168.223.129:/root/filetest

```

然后,进入到应用服务器(192.168.223.129),检查 `/root` 目录下是否出现 `filetest`。最后,在 Jenkins 服务器上使用 SSH 进行免密连接测试,成功后会出现 "Last Login" 的提示:

```bash

$ ssh root@192.168.223.129 Last login: Sun Sep 20 21:53:03 2020 $ exit

```

为了实现免密登录和拷贝,我们首先需要在本地机器上生成SSH密钥对,并将公钥添加到目标服务器的authorized_keys文件中。接下来,我们编写Jenkins发布脚本,用于自动化部署应用。

1. 在本地机器上生成SSH密钥对:

```bash

ssh-keygen -t rsa -P ""

```

2. 将公钥(默认为~/.ssh/id_rsa.pub)添加到目标服务器的authorized_keys文件中:

```bash

ssh root@your_server_ip "mkdir -p ~/.ssh && cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys"

```

3. 编写Jenkins发布脚本:

```bash

#!/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} <

mkdir -p $DIR/backup/${projectName}

mkdir -p $DIR/${projectName}

if [ -f "$DIR/${projectName}/${projectName}.jar" ];then

mv $DIR/${projectName}/${projectName}.jar $DIR/backup/${projectName}/${projectName}-`date "+%Y%m%d_%H%M%S"`.jar

fi

EOF

echo "拷贝jar包到目标服务器的tmp目录"

scp -q -oStrictHostKeyChecking=no ${WORKSPACE}/target/*.jar root@${server_ip}:/tmp/${projectName}.jar

echo "ssh远程连接进行发布操作"

ssh -q -oStrictHostKeyChecking=no root@${server_ip} <

mv /tmp/${projectName}.jar $DIR/${projectName}/${projectName}.jar

EOF

done

echo "success"

```

4. 将上述脚本保存为jenkins_deploy.sh,并赋予执行权限:

```bash

chmod +x jenkins_deploy.sh

```

5. 在Jenkins中创建一个新的任务,选择“构建一个自由风格的软件项目”,并配置源代码管理、构建触发器等信息。在构建环节中,添加一个“执行shell”步骤,运行刚刚编写的jenkins_deploy.sh脚本。

请根据提供的内容完成内容重构,并保持段落结构:

```

/data/app/my-boot

$ touch start.sh

$ vi 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

$ touch stop.sh

$ vi stop.sh

#!/bin/bash

APP_ID=my-boot

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

```

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

以下是重构后的文本:

Jenkins自动化部署教程:

1. 以root用户身份登录系统。

2. 执行命令`su root`,以获取root权限。

3. 开启防火墙9010端口,执行命令`firewall-cmd --zone=public --add-port=9010/tcp --permanent`。

4. 使配置生效,执行命令`firewall-cmd --reload`。

5. 访问地址为`http://192.168.223.129:9010`。