目录java
Jenkins自动化部署流程linux
前言git
硬件环境web
软件环境spring
1)安装JDKdocker
2) 安装Mavenshell
3) 安装Gitapache
4)安装Dockerwindows
5) 安装Jenkinscentos
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工做,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
在实际使用的过程当中咱们可使用Jenkins还实现代码的快速部署,它拥有许多插件便于咱们集成各类各样的工具,如代码拉取层,咱们能够集成SVN、GitLab。项目构建层可使用Maven。项目部署能够采用jar包形式或者war包的Apache Tomcat形式也能够推送远程私库,作到远程部署。另外对于时下里流行的微服务Jenkins也能够很好的实现快速构建、部署,极大的提升开发、测试效率。
本文主要将一个Springboot项目经过Gitlab、Maven、Jenkins、Docker等技术,实现项目的自动化提交部署功能。
笔者使用的环境为阿里云的centos7(若是没有购买服务器也可使用Vmware虚拟机)
自制springboot简单项目一份。
yum search java | grep jdk
会出现全部版本的jdk
yum install 你所须要的jdk版本全名
yum install java-1.8.0-openjdk.i686
接下来查看JDK版本
java -version
[root@iZbp1gaxhmejbai4lzftzdZ ~]# java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK Server VM (build 25.191-b12, mixed mode)
yum install maven
查看maven版本
mvn -v
[root@iZbp1gaxhmejbai4lzftzdZ /]# mvn -v
Apache Maven 3.0.5 (Red Hat 3.0.5-17)
Maven home: /usr/share/maven
Java version: 1.8.0_191, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-862.6.3.el7.x86_64", arch: "amd64", family: "unix"
yum install git
yum install -y docker
systemctl start docker
docker version
https://jenkins.io/download 到Jenkins的官网自行下载所需的war包
java -jar jenkins.war –-httpPort=8080
或者也能够把war包放在tomcat里,而后访问localhost:8080/jenkins便可
登录GitLab官网注册帐号https://gitlab.com
新建项目oyster-server
windows中下载Git https://git-scm.com/download/win
点击安装一路next完成安装
命令行运行如下指令:
ssh-keygen -t rsa -C "你的邮箱地址";
先肯定文件位置回车
而后输入ssh密码回车
而后确认密码回车
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"
而后粘贴sshkey到这个地方
打开idea新建咱们的
测试的springboot项目,而后在idea的菜单项选择 VCS》Import into Version Control》Create Git Repository
出现Select directory for git init对话框,直接点肯定
本来的项目文件名变成了红色
而后右键项目名,选择Git Add 项目变绿
继续操做,右键项目》Git》Commit File,而后在提交建立填写提交注释说明。提交项目到本地库。
而后 右键项目》Git》Repository》Push
而后配置远程Gitlab仓库
先复制Gitlab下的项目地址
而后填写在name和url中
而后出现push successful,打开Gitlab 刷新项目
此时项目已成功上传到了Gitlab上。
主要在于docker-maven-plugin插件的配置
<?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"> <modelVersion>4.0.0</modelVersion> <groupId>com.springboot.server</groupId> <artifactId>oyster-server</artifactId> <version>1.0-SNAPSHOT</version> <name>oyster-server</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!--Docker maven plugin start--> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <configuration> <imageName>dockerspringboot</imageName><!--[a-z 0-9] 否则docker:build会报错--> <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> <!--Docker maven plugin end--> </plugins> </build> </project>
在src》main目录下新建docker文件夹,新增Dockerfile文件
#FROM openjdk:8-jdk-alpine FROM hub.c.163.com/dwyane/openjdk:8 MAINTAINER red-eric 2505068703@qq.com VOLUME /tmp ADD oyster-server-1.0-SNAPSHOT.jar app.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
@SpringBootApplication @RestController public class OysterApplication { public static void main( String[] args ) { SpringApplication.run(OysterApplication.class, args); } @RequestMapping("/") public String index() { return "这是个人springboot应用"; } }
把window下载的Jenkins.war拷贝到阿里云服务器中
打开阿里云控制台
开放Jenkins端口9003
把window下载的Jenkins.war拷贝到阿里云服务器中
打开阿里云控制台
开放Jenkins端口9003
在Jenkins.war所在目录执行
nohup java -jar jenkins.war --httpPort=9003 >/dev/null 2>/dev/null &
还有一种简单的方法就是,下载个tomcat ,而后直接把war包放在tomcat中,而后访问xxx.xx.xx.xx:8080/jenkins就能够了
复制此路径
在shell中执行
cat /root/.jenkins/secrets/initialAdminPassword
查看初始密码,而后登录,选择建议的插件,而后从新设置用户名密码
以前咱们已经在centos中安装了Git、Maven和Docker ,如今就开始在Jenkins中配置他们。
打开Jenkins控制面板中 系统管理》全局工具配置
新增Gitlab插件和Maven Integration插件
Gitlab插件:当gitlab有push时触发jenkins拉取代码和将构建状态发送回GitLab
Maven Integration:用来简化建造Maven工程.
安装完插件后能够重启一下,直接在网址后边拼上/restart 能够重启Jenkins
配置maven 的全局环境变量 系统设置》系统设置
再Gitlab中得到APIToken
点击生成后得到一个APIToken
而后打开Jenkins
添加GitlabToken
而后点击左下角的测试
会出现success的字样。
这里能够建立自由风格的任务或者Maven任务均可以
源码管理选择Git
打开Gitlab中的测试springboot项目复制项目地址
添加受权
这里采用用户名+密码验证的方式便可
选择当代码提交时自动构建,点击Generate 生成,得到Jenkins的Token
复制url而后打开Gitlab
复制URL和Token 到这个地方点击Add Webhook
点击当即构建便可 拉取Gitlab上的代码到本地
前两次失败是因为Git的路径配置错误,因而用
whereis git
从新查询了下路径,从新配置全局工具
而后测试 个人Gitlab提交是否回同步代码到Jenkins
点击Test push
Jenkins自动进行了第4次构建
至此,GitLab到Jenkins已经所有打通了,接下来看Jenkins的代码如何部署。
点击任务详情页面的Configure
在Build中选择调用顶层Maven构建项目
添加Maven打包命令
clean install -Dmaven.test.skip=true
而后添加shell脚本
# 先删除以前的容器 echo "remobe old container" cid=$(docker ps -a | grep dockerspringboot | awk '{print $1}'| xargs) if [ $cid ] then echo "aaaaaaaaaaaa" echo "ccccccccc" docker rm -f $cid # 删除以前的镜像 echo "romove old image" docker rmi dockerspringboot else echo "no container now" fi # 构建镜像 mvn docker:build # 打印当前镜像 echo "current docker images" docker images | grep dockerspringboot # 启动容器 echo "start container" docker run -p 8010:8010 -d --name myspringboot dockerspringboot # 打印当前容器 echo "current container" docker ps -a | grep dockerspringboot echo "star service success!"
在GitLab中使用push event,而后在Jenkins中能够看到项目自动进入构建状态
查看Jenkins控制台输出
打开浏览器访问咱们的网址
大功告成!
关于这套部署环境的改良,能够把GitLab安装放在单独的docker容器中,减小主服务器占用资源。
若是须要作到部署环境与线上环境分离,能够在pom文件中配置docker私库。同时还须要添加两台主机的sshkey。
须要先新增Maven属性
<properties>
<docker.registry>172.0.0.1:50000</docker.registry>
</properties>
而后把${docker.registry}属性做为imageName的前缀
<imageName>${docker.registry}/${project.groupId}/${project.artifactId}:${project.version}</imageName>
最后执行mvn docker:build docker:push
<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <configuration> <!--imageName 用于指定Docker镜像的完整名称 groupoId为仓库名 artifactId为镜像名 version为标签名--> <imageName>${project.groupId}/${project.artifactId}:${project.version}</imageName> <!-- 用与指定Dockerfile文件所在的位置,project.build.outputDirectory 为了读取通过Maven资源过滤后的Dockerfile文件--> <dockerDirectory>${project.build.outputDirectory}</dockerDirectory> <resources> <resource> <!--指定须要复制的根目录--> <directory>${project.build.directory}</directory> <!--用于指定须要复制的文件--> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin>
在Jenkins中运行docker命令有4中方式