CentOS+Docker+Jenkins+Gradle+Github自动部署kotlin Spring-boot项目

前言

  • 购买服务器
  • 重做系统 CentOS7.5
  • 远端SSH登录服务器
  • 发车

打个广告 ~ 移动端离线鉴黄实现,可移植到多个平台,让鉴黄付费不存在~ open_nsfw

更新yum源

yum update

安装必要软件

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

设置yum下载源为阿里仓库(网速ok的可以省略这一步)

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

查看仓库中所有的docker版本

yum list docker-ce --showduplicates | sort -r

选择一个版本进行安装(下面的xxxx换成要安装的docker)

sudo yum install xxxx

等待安装结束后,启动docker 并设置docker开机自启,代码如下

sudo systemctl start docker && sudo systemctl enable docker

查看docker版本

docker version

安装项目需要的软件,我项目需要redis和mysql,以下为示例命令,需要其他软件的可参考以下命令

  • 下载redis镜像
docker pull redis
  • 启动redis(--name 名称设置为redis,-p 映射主机端口 6379到redis容器内部6379端口,这里注意到服务器配置页面开放6379端口,否则访问了容器内部的redis,--requirepass 密码,-d表示容器后台运行 ,-v挂载目录 让容器时间与服务器同步 )
docker run -d -v /etc/localtime:/etc/localtime --name redis -p 6379:6379 redis --requirepass 123456
  • 启动成功后用 docker ps 命令可以查看当前运行的容器

  • 同样的方式下载安装Mysql

docker pull mysql 
  • 启动mysql(服务器开启3306端口)
docker run -p 3306:3306 -v /etc/localtime:/etc/localtime --name mysql  -e MYSQL_ROOT_PASSWORD=123456 -d mysql
  • 启动成功后用 docker ps 命令可以查看当前运行的容器

现在远端可以使用响应工具链接MySQL和Redis了

同上方式安装Jenkins

  • 下载jenkins镜像
docker pull  jenkins/jenkins:lts
  • 创建文件夹来挂载jenkins目录
mkdir /home/jenkins_home
  • 启动jenkins并挂载目录(-u root是以管理员模式运行容器,因为等会要进入容器内部用到管理员命令,同样记得开放8080和50000端口,这里我多开了两个端口,因为我准备把项目直接挂到jenkins所在的容器,所以项目用到的端口我也要开启一下)
docker run -u root -d  -v /etc/localtime:/etc/localtime --name jenkins -p 80:80 -p 443:443 -p 8888:8080 -p 50000:50000 -v /home/jenkins:/home/jenkins jenkins/jenkins:lts
  • 启动成功,在浏览器访问你的IP地址+端口号就可以访问到jenkins页面了


    home.png
  • 需要一个管理员密码,用如下命令进入容器后获取。

docker exec -it jenkins bash
  • 获取管理员密码
cat /var/jenkins_home/secrets/initialAdminPassword
  • 复制密码并输入密码后进入下一步,按照提示选择推荐的插件基础包安装


    azcj.png
  • 让它慢慢搞事情,我们先去搞点别的事情
  • 打开github你的项目主页 ->>Setting ->>Webhooks ->> Add webhook 填写下面的地址
http://你的服务器地址:8080/jenkins/github-webhook
  • ContentType选择application/json
  • Just the push event 打勾
  • Active打勾,保存
  • 点击github右上角个人设置按钮,以此选择 Settings ->> Developer settings ->>Personal access tokens ->> New personal access token
  • 名字随便起一个,选择授于的权限 repo 和 gist打勾,点击生成,返回后复制生成的token备用(下次进入页面就看不到了,复制到安全的地方)
  • 回头看看jenkins插件下载完了没.... 还没完,不要着急。咱们再干点别的事,在gradle中添加几个命令待用
bootJar {
    doFirst {
        println 'Start BootJar task...'
        baseName = 'wb-spring-boot'
        version = '1.3'
    }
    doLast {
        println 'BootJar success.'
    }
}
}
  • 再看下插件下完没,还没下完... 我去刷一会皮皮虾。

  • 刷不动了,快十点了。回家睡觉了,明天再更。

  • 时隔一晚终于下完了,我们继续... 设置一个管理员账号和密码,以后登录就直接用设置的这个账号和密码了。


    szmm.png
  • 点击保存并完成,一路下一步

  • 点击左边的系统管理 ->> Manage Jenkins ->> configure system对github进行配置


    addgithub.png
  • 随便起个名字,点击添加,复制我们在github生成的token。上面有说,往上翻翻


    addtoken.png
  • 如下图操作,选择刚才添加的token,点击测试,出现下图的字符表示添加成功


    addgsucc.png
  • 点击左下角的保存

  • 接下来创建项目 ,点击创建一个新任务

  • 输入一个项目名称,按下图选择后点击确定

c_s.png
  • 配置仓库 ->> 源码管理->>Git 输入项目地址 ->>添加git账号(用户名)和密码
gitsp.png
  • 选择刚才添加的账号 选择后会有红色异常,稍等会链接到仓库后就没了,如果一直红色警告,检查你的账号和密码,或者检查你的服务器是否安装了git。这里出问题留言,我协助你解决。

  • 再往下走 构建触发器选择 GitHub hook trigger for GITScm polling ,因为我们要在提交代码后由github通知jenkins构建

  • 构建环境按照下图标示选择


    gj.png
  • 安装gradle并配置环境变量

  • 进入jenkins容器

docker exec -it jenkins bash
  • 进入根目录
cd /
  • 我下载4.8的gradle,你根据需要来
wget https://downloads.gradle.org/distributions/gradle-4.8-all.zip
  • 下载好了后就在当前目录下,我为了方便就在容器根目录下下载的,直接解压
unzip gradle-4.8-all.zip
  • 删除压缩文件
rm -rf gradle-4.8-all.zip
  • 安装vim命令
apt-get update
apt-get install vim
  • 配置环境变量
vim /etc/profile
  • 加入下面的内容 别想了,复制不了,手动写一下吧
etc.png
  • 算了还是让你拷贝一下吧
PATH=$PATH:/gradle-4.8/bin
export PATH
  • 按退出键 输入:wq 敲回车保存
  • 让刚才修改的环境变量生效
source /etc/profile
  • 查看gradle版本
gradle -v
  • 看到版本表示成功了

Welcome to Gradle 4.8!

Here are the highlights of this release:
 - Dependency locking
 - Maven Publish and Ivy Publish plugins improved and marked stable
 - Incremental annotation processing enhancements
 - APIs to configure tasks at creation time

For more details see https://docs.gradle.org/4.8/release-notes.html


------------------------------------------------------------
Gradle 4.8
------------------------------------------------------------

Build time:   2018-06-04 10:39:58 UTC
Revision:     9e1261240e412cbf61a5e3a5ab734f232b2f887d

Groovy:       2.4.12
Ant:          Apache Ant(TM) version 1.9.11 compiled on March 23 2018
JVM:          1.8.0_232 (Oracle Corporation 25.232-b09)
OS:           Linux 3.10.0-1062.1.1.el7.x86_64 amd64
  • 添加gradle变量进jenkins 系统管理 ->>系统工具配置 ->> 新增gradle


    addgradle.png
  • 构建内容添加两个,第一个选择invoke Gradle script 第二个选择执行shell,图中的copyJavaFile可以去掉,是我自己的逻辑。


    add2.png
  • 第二个执行shell 填写下面的脚本

#!/bin/bash
echo 打包成功,开始运行jar;
#进程处理
/bin/fuser -k -n tcp 80
BUILD_ID=DONTKILLME
java -jar /var/jenkins_home/workspace/WB-Service/build/libs/wb-spring-boot-1.3.jar &
echo 构建成功
  • 这里脚本中可能还需要个工具 psmisc,进入容器后安装
docker exec -it jenkins bash
  • 安装psmisc
apt-get install psmisc
  • 查询引用路径(注意替换脚本中/bin/fuser的路径,一般情况不用替换)
root@df727b881c6f:/# whereis fuser
fuser: /bin/fuser /usr/share/man/man1/fuser.1.gz
root@df727b881c6f:/# 
  • 回到jenkins配置页面,点击保存,立即构建 (这里的项目目录替换脚本中的jar执行路径)


    git_last.png
  • 我失败三次了...兄弟你呢? 不能忍,搞点事情,直接把项目复制到jenkins工作目录中吧..

  • 先将项目打包,copy到服务器的根目录下(windows 用winscp工具蛮好的 mac的话也有类似的,我用的SecureFX,直接拖到服务器根目录下)

  • 将服务器根目录下的文件copy进容器内部。这里需要注意,会用到容器的长ID,不是短ID。首先用如下命令查看运行的容器

docker ps
  • 根据容器名称查询长ID(命令:docker inspect -f '{{.ID}}' +容器名称)
docker inspect -f '{{.ID}}' jenkins
  • copy进容器中,(命令:docker cp + 服务器中的文件 + 刚才查询到的容器长ID + : + 容器中的路径)容器路径填写工作空间的路径
docker cp WB-Service.zip 42b70191d27fcf0164abb36e33e223da52e306d49d6d5348e55663caac96bb82:/var/jenkins_home/workspace/
  • 进入容器
docker exec -it jenkins bash
  • 解压文件夹并重命名文件夹为工作空间的名称
cd /var/jenkins_home/workspace/
  • 解压
unzip WB-Service.zip
  • 停止正在构建的项目 删除原工作目录
rm -rf WB-Service
  • 将解压出来的项目名称变更为空间名称,就是你在新建jenkins任务的时候写的那个
mv wb-spring-boot-project WB-Service
  • 进入jenkins首页,点击工作空间你就可以看到你的项目了


    pro.png
  • 这时候再次点击立即构建,jenkins把本地工作空间的内容和github的一对比就好了,因为基本没有改动。直接进入下一步。

  • 立即构建

cccc.png
  • 从项目中提交一个改动。这边就自动触发编译并且部署了。


    push1.png
push2.png

至此 自动部署完成~ 来自一个入行一个月的java开发猿... 大佬多多指教。

打个广告 ~ 移动端离线鉴黄实现,可移植到多个平台,让鉴黄付费不存在~ open_nsfw

你可能感兴趣的:(CentOS+Docker+Jenkins+Gradle+Github自动部署kotlin Spring-boot项目)