【黑马头条】-day12项目部署和发布-jenkins


文章目录

  • [1 持续集成](#1 持续集成)
  • [2 软件开发模式](#2 软件开发模式)
    • [2.1 瀑布模式](#2.1 瀑布模式)
    • [2.2 敏捷开发](#2.2 敏捷开发)
      • [2.2.1 迭代开发](#2.2.1 迭代开发)
      • [2.2.2 增量开发](#2.2.2 增量开发)
  • [3 Jenkins](#3 Jenkins)
    • [3.1 Jenkins安装](#3.1 Jenkins安装)
      • [3.1.1 导入镜像](#3.1.1 导入镜像)
      • [3.1.2 配置](#3.1.2 配置)
      • [3.1.3 初始化设置](#3.1.3 初始化设置)
    • [3.2 插件安装](#3.2 插件安装)
    • [3.3 服务器环境准备](#3.3 服务器环境准备)
      • [3.3.1 Docker安装配置](#3.3.1 Docker安装配置)
      • [3.3.2 Git安装配置](#3.3.2 Git安装配置)
      • [3.3.3 Maven安装配置](#3.3.3 Maven安装配置)
    • [3.4 Jenkins工具配置](#3.4 Jenkins工具配置)
  • [4 后端项目部署](#4 后端项目部署)
    • [4.1 多环境切换](#4.1 多环境切换)
    • [4.2 部署](#4.2 部署)
      • [4.2.1 上传到码云](#4.2.1 上传到码云)
    • [4.3 服务集成Docker配置](#4.3 服务集成Docker配置)
    • [4.4 jenkins基础依赖打包配置](#4.4 jenkins基础依赖打包配置)
    • [4.5 微服务打包配置](#4.5 微服务打包配置)
    • [4.6 部署服务到远程服务器上](#4.6 部署服务到远程服务器上)
      • [4.6.1 配置Docker客户端](#4.6.1 配置Docker客户端)
      • [4.6.2 jenkins中安装插件](#4.6.2 jenkins中安装插件)
      • [4.6.3 jenkins系统配置远程服务器链接](#4.6.3 jenkins系统配置远程服务器链接)
    • [4.7 将微服务部署到130服务器](#4.7 将微服务部署到130服务器)
    • [4.8 查看结果](#4.8 查看结果)
    • [4.9 联调测试](#4.9 联调测试)
  • [5 jenkins触发器配置](#5 jenkins触发器配置)
    • [5.1 URL触发远程构建](#5.1 URL触发远程构建)
    • [5.2 其他工程构建后触发](#5.2 其他工程构建后触发)
    • [5.3 定时构建](#5.3 定时构建)
    • [5.4 轮询](#5.4 轮询)
  • [6 总结](#6 总结)

1 持续集成

2 软件开发模式

2.1 瀑布模式

2.2 敏捷开发

2.2.1 迭代开发

2.2.2 增量开发

3 Jenkins

3.1 Jenkins安装

3.1.1 导入镜像

可以导入资料中的镜像:

shell 复制代码
服务器用户名:root   密码:itcast
jenkins  用户名:itcast   密码:itcast

1、采用YUM方式安装,加入jenkins安装源:

shell 复制代码
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificate
 
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

执行yum命令安装:

shell 复制代码
yum -y install jenkins

2、采用RPM安装包方式

shell 复制代码
wget https://pkg.jenkins.io/redhat-stable/jenkins-2.190.1-1.1.noarch.rpm

执行安装:

shell 复制代码
rpm -ivh jenkins-2.190.1-1.1.noarch.rpm

3.1.2 配置

修改配置文件:

shell 复制代码
vi /etc/sysconfig/jenkins

修改内容:

shell 复制代码
# 修改为对应的目标用户, 这里使用的是root
$JENKINS_USER="root"
# 服务监听端口
JENKINS_PORT="16060"

目录权限:

shell 复制代码
chown -R root:root /var/lib/jenkins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins

重启:

systemctl restart jenkins

如果启动失败, 出现错误信息:

Starting Jenkins bash: /usr/bin/java: No such file or directory

创建JAVA环境的软链接:

ln -s /usr/local/jdk/bin/java /usr/bin/java

3.1.3 初始化设置

http://192.168.200.100:16060/

需要输入管理密码, 在以下位置查看:

cat /var/lib/jenkins/secrets/initialAdminPassword

按默认设置,把建议的插件都安装上

安装完成之后, 创建管理员用户:

配置访问地址:

配置完成之后, 重启可以看到管理后台:

3.2 插件安装

3.3 服务器环境准备

3.3.1 Docker安装配置

更新软件包版本

shell 复制代码
yum -y update

卸载旧版本

shell 复制代码
yum -y remove docker  docker-common docker-selinux docker-engine

安装软件依赖包

shell 复制代码
yum install -y yum-utils device-mapper-persistent-data lvm2

设置yum源为阿里云

shell 复制代码
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装后查看docker版本

shell 复制代码
docker -v

启动,设置开机启动:

shell 复制代码
systemctl enable docker

启动docker

shell 复制代码
systemctl start docker

3.3.2 Git安装配置

1、yum 安装方式

shell 复制代码
yum -y install git

2、采用源码包方式安装

安装依赖包

shell 复制代码
yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum -y install gcc perl-ExtUtils-MakeMaker

如果之前有安装旧版本, 先做卸载, 没有安装则忽略

yum remove git

下载源码包

shell 复制代码
cd /usr/local
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-1.8.3.1.tar.gz
tar -xvf git-1.8.3.1.tar.gz

也可以安装其他版本, 地址:https://mirrors.edge.kernel.org/pub/software/scm/git/

编译安装

shell 复制代码
cd git-1.8.3.1
make prefix=/usr/local/git all
make prefix=/usr/local/git install
echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
source /etc/bashrc

检查git版本

shell 复制代码
git version
shell 复制代码
git version 1.8.3.1

3.3.3 Maven安装配置

下载安装包,下载地址: https://maven.apache.org/download.cgi

解压安装包

shell 复制代码
cd /usr/local
unzip -o apache-maven-3.6.1.zip 

上传本地仓库并解压,配置环境变量配置

shell 复制代码
vi /etc/profile

增加:

shell 复制代码
export MAVEN_HOME=/usr/local/maven/apache-maven-3.6.1
export PATH=$PATH:$MAVEN_HOME/bin

如果权限不够,则需要增加当前目录的权限

shell 复制代码
chmod 777 /usr/local/maven/apache-maven-3.6.1/bin/mvn

修改镜像仓库配置:

shell 复制代码
vi /usr/local/maven/apache-maven-3.6.1/conf/settings.xml

需要把本机的仓库打包上传到服务器上(不上传会自动下载),然后指定上传后的仓库配置

设置仓库

cd /usr/local/maven/apache-maven-3.6.1/conf

找到当前的conf

vi settings.xml

替换成linux中自己的meavn仓库

cd /usr/local/maven/repository_new

/usr/local/maven/repository_new这个就是我们仓库的路径

替换刚刚的红线

3.4 Jenkins工具配置

  1. 进入系统管理--> 全局工具配置

在虚拟机中用

whereis xxx

来找当前位置

4 后端项目部署

4.1 多环境切换

在任意微服务的nacos配置装中添加

profiles:
    active: dev

4.2 部署

4.2.1 上传到码云

添加.gitgnore

git 复制代码
.idea
.classpath
.project
*.iml
target/
.DS_Store
.gitattributes

在项目上点击git->add

现在提交只是提交到本地,还需要push到远程仓库

保存这个url,定义远程

点击推送

4.3 服务集成Docker配置

目标:部署的每一个微服务都是先创建docker镜像后创建对应容器启动

方式一:本地微服务打包以后上传到服务器,编写Dockerfile文件完成。

方式二:使用dockerfile-maven-plugin插件,可以直接把微服务创建为镜像使用(更省事)

每个微服务都引入该依赖,以heima-leadnews-user微服务为例

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>heima-leadnews-service</artifactId>
        <groupId>com.heima</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
 
    <artifactId>heima-leadnews-user</artifactId>
 
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <docker.image>docker_storage</docker.image>
    </properties>
 
    <build>
        <finalName>heima-leadnews-user</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.3.6</version>
                <configuration>
                    <repository>${docker.image}/${project.artifactId}</repository>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>
        </plugins>
    </build>
 
</project>

在heima-leadnews-user的根目录下创建Dockerfile,与pom.xml同级

dockerfile 复制代码
# 设置JAVA版本
FROM java:8
# 指定存储卷, 任何向/tmp写入的信息都不会记录到容器存储层
VOLUME /tmp
# 拷贝运行JAR包
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
# 设置JVM运行参数, 这里限定下内存大小,减少开销
ENV JAVA_OPTS="\
-server \
-Xms256m \
-Xmx512m \
-XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=512m"
#空参数,方便创建容器时传参
ENV PARAMS=""
# 入口点, 执行JAVA运行命令
ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /app.jar $PARAMS"]

4.4 jenkins基础依赖打包配置

目标需要指定工程的pom文件

clean install -Dmaven.test.skip=true -f ./pom.xml

没有的依赖都会下载到100服务器的本地仓库

4.5 微服务打包配置

所有微服务打包的方式类似,以heima-leadnews-user微服务为例

需要到pom.xml文件

clean install -Dmaven.test.skip=true  dockerfile:build -f heima-leadnews/heima-leadnews-service/heima-leadnews-user/pom.xml
shell 复制代码
if [ -n  "$(docker ps -a -f  name=$JOB_NAME  --format '{{.ID}}' )" ]
 then
 #删除之前的容器
 docker rm -f $(docker ps -a -f  name=$JOB_NAME  --format '{{.ID}}' )
fi
 # 清理镜像
docker image prune -f 
 # 启动docker服务
docker run -d --net=host -e PARAMS="--spring.profiles.active=prod"  --name $JOB_NAME docker_storage/$JOB_NAME

4.6 部署服务到远程服务器上

目标:使用jenkins(192.168.200.100)把微服务打包部署到192.168.200.130服务器上

下载最新Registry镜像

shell 复制代码
docker pull registry:latest

启动Registry镜像服务

shell 复制代码
docker run -d -p 5000:5000 --name registry \
-v /usr/local/docker/registry:/var/lib/registry \
registry:latest

映射5000端口; -v是将Registry内的镜像数据卷与本地文件关联, 便于管理和维护Registry内的数据。

查看仓库资源

访问地址:http://192.168.200.100:5000/v2/_catalog

启动正常, 可以看到返回:

{"repositories":[]} 目前并没有上传镜像, 显示空数据。

4.6.1 配置Docker客户端

正常生产环境中使用, 要配置HTTPS服务, 确保安全,内部开发或测试集成的局域网环境,可以采用简便的方式, 不做安全控制。

先确保持续集成环境的机器已安装好Docker客户端, 然后做以下修改

shell 复制代码
vi /lib/systemd/system/docker.service

修改内容:

shell 复制代码
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.200.100:5000

指向安装Registry的服务IP与端口。

重启生效:

shell 复制代码
systemctl daemon-reolad
systemctl restart docker.service

4.6.2 jenkins中安装插件

4.6.3 jenkins系统配置远程服务器链接

添加凭证

Manage Jenkins-->Manage CreDentials

添加链接到130服务器的用户名和密码

配置远程服务器链接

Manage Jenkins-->Configure System

4.7 将微服务部署到130服务器

前期步骤参考4.3,添加环境并且添加针对新的环境的nacos配置

默认值,即端口为5000

shell 复制代码
clean install -Dmaven.test.skip=true dockerfile:build -f heima-leadnews/heima-leadnews-service/heima-leadnews-article/pom.xml
shell 复制代码
image_tag=$docker_registry/docker_storage/$JOB_NAME
echo '================docker镜像清理================'
if [ -n  "$(docker ps -a -f  name=$JOB_NAME  --format '{{.ID}}' )" ]
 then
 #删除之前的容器
 docker rm -f $(docker ps -a -f  name=$JOB_NAME  --format '{{.ID}}' )
fi
 # 清理镜像
docker image prune -f 
 
# 创建TAG
docker tag docker_storage/$JOB_NAME $image_tag
echo '================docker镜像推送================'
# 推送镜像
docker push $image_tag
# 删除TAG
docker rmi $image_tag
echo '================docker tag 清理 ================'
shell 复制代码
echo '================拉取最新镜像================'
docker pull $docker_registry/docker_storage/$JOB_NAME
 
echo '================删除清理容器镜像================'
if [ -n  "$(docker ps -a -f  name=$JOB_NAME  --format '{{.ID}}' )" ]
 then
 #删除之前的容器
 docker rm -f $(docker ps -a -f  name=$JOB_NAME  --format '{{.ID}}' )
fi
 # 清理镜像
docker image prune -f 
 
echo '===============启动容器================'
docker run -d   --net=host -e PARAMS="--spring.profiles.active=prod" --name $JOB_NAME $docker_registry/docker_storage/$JOB_NAME

4.8 查看结果

构建完成

容器

4.9 联调测试

upstream  heima-app-gateway{
	server 192.168.200.100:51601;
}

5 jenkins触发器配置

5.1 URL触发远程构建

触发远程构建,修改jenkins的配置,如下

触发构建url: http://192.168.200.100:16060/job/leadnews-admin/build?token=88888888

5.2 其他工程构建后触发

配置需要触发的工程

5.3 定时构建

5.4 轮询

轮询 SCM(Poll SCM)

轮询SCM,是指定时扫描本地代码仓库的代码是否有变更,如果代码有变更就触发项目构建。

Jenkins会定时扫描本地整个项目的代码,增大系统的开销,不建议使用。

6 总结

黑马头条的项目还是很不错的。完结撒花!

相关推荐
伯牙碎琴2 分钟前
八、TOGAF(架构治理Architecture Governance)
java·微服务·架构
liuyang-neu7 分钟前
力扣 16.最接近的三数之和
java·数据结构·算法·leetcode
艾伦~耶格尔9 分钟前
Java API 之集合框架进阶
java·开发语言·学习
韩子谦10 分钟前
Java迭代器Iterator和Iterable有什么区别?
java·windows·python
Satan71212 分钟前
【Java】全面理解Java8特性
java·开发语言
至简行远13 分钟前
路由器接口配置DHCP实验简述
java·服务器·网络·数据结构·python·算法·智能路由器
c1tenj214 分钟前
SpringCloud Feign 以及 一个标准的微服务的制作
java·spring cloud·微服务
小郝同学(恩师白云)28 分钟前
SpringMVC后续4
java·服务器·前端
爱笑的源码基地32 分钟前
Java+Spring Cloud +UniApp 智慧工地源码,用户PC端、移动端数据同步,支持多端展示
人工智能·spring cloud·源码·软件开发·智慧工地·智慧工地app·住建数据监管
March€33 分钟前
基于mockito做单元测试
java·单元测试·log4j