CentOS+Docker+Jenkins+Gradle+Git
前言
- 购买服务器
- 重做系统 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 -
点击左下角的保存
-
接下来创建项目 ,点击创建一个新任务
-
输入一个项目名称,按下图选择后点击确定
- 配置仓库 ->> 源码管理->>Git 输入项目地址 ->>添加git账号(用户名)和密码
-
选择刚才添加的账号 选择后会有红色异常,稍等会链接到仓库后就没了,如果一直红色警告,检查你的账号和密码,或者检查你的服务器是否安装了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
- 加入下面的内容 别想了,复制不了,手动写一下吧
- 算了还是让你拷贝一下吧
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的一对比就好了,因为基本没有改动。直接进入下一步。
-
立即构建
-
从项目中提交一个改动。这边就自动触发编译并且部署了。
push1.png