一、搭建环境
使用Jenkins做部署之前,需要安装jdk和maven,docker私有仓库,项目需要连接数据库就要安装数据库如mysql
docker安装教程百度上很多,这里就不讲了。
0、mysql安装
-
在命令行窗口执行拉取镜像命令
docker pull mysql:5.7
-
下载完成后,查看镜像
docker images
-
在/root/docker/下创建mysql
mkdir mysql
-
新建:/root/docker/mysql/my.cnf (准备挂载配置文件用)
# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ [mysqld] sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' lower_case_table_names=0
-
运行挂载命令
docker run --privileged=true --name mysql5.7 -p 3306:3306 -v /root/docker/mysql/datadir:/var/lib/mysql -v /root/docker/mysql/conf.d:/etc/mysql/conf.d -v /root/docker/mysql/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
-
重启mysql容器
docker restart 容器id
-
使用navicat链接试试
ip是宿主机ip,密码为root
1、jdk安装
个人喜欢使用手动安装,方便后面配置JAVA_HOME,当然也可以选中yum安装,下面只介绍手动安装。
-
首先在官网下载jdk的安装包
-
将jdk安装包上传到linux
我上传的路径是/usr/local/java
cd /usr/local/java
-
解压安装包
tar -zxvf jdk-8u261-linux-x64.tar
-
解压后得到安装包
-
配置环境变量
vim /etc/profile
-
在配置文件末端加入
#set java environment export JAVA_HOME=/usr/local/java/jdk1.8.0_261 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH
注意 JAVA_HOME 为你压缩包解压后的文件夹的路径
-
刷新环境配置文件
source /etc/profile
-
查看是否安装和配置成功
#查看java版本
java -version
#查看java根路径
echo $JAVA_HOME
2、docker本地仓库安装
-
拉取私有仓库镜像
docker pull registry
-
启动私有仓库容器,并挂载镜像到本地
先 mkdir 创建 /root/docker/registry 文件夹
docker run -d -v /root/docker/registry:/var/lib/registry -p 5000:5000 --name myregistry registry:latest
宿主机地址:/root/docker/registry
容器内地址:/var/lib/registry
-
打开浏览器 输入地址
http://宿主机ip:5000/v2/_catalog
我的宿主机ip为192.168.220.3
所以我访问的地址为http://192.168.220.3:5000/v2/_catalog
-
看到 {“repositories”:[]} 表示私有仓库搭建成功并且内容为空
-
修改daemon.json,让docker信任私有仓库
vi /etc/docker/daemon.json
{"insecure‐registries":["宿主机ip:5000"]}
-
重启docker服务
systemctl restart docker
3、maven安装
-
在线下载
# 我安装的目录为 /root/docker/maven 没有则先创建 # 下载maven(3.6.3) wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
-
安装maven并上传本地仓库
#解压 tar zxvf apache-maven-3.6.3-bin.tar.gz #移动并重命名 mv apache‐maven‐3.6.3 /root/docker/maven #创建仓库保存目录 mkdir repository
-
配置环境变量和映射仓库地址
#设置环境变量 vim /etc/profile #在/etc/profile中添加以下几行并保存 export MAVEN_HOME=/root/docker/maven export PATH=$MAVEN_HOME/bin:$PATH #执行source /etc/profile使环境变量生效 source /etc/profile #最后运行mvn -v验证maven是否安装成功,如果安装成功会打印如下内容: mvn -v
安装maven之前要安装jdk,如果提示找不到JAVA_HOME可能是JDK没有配置成功
-
修改配置文件,指定本地仓库位置
cd /root/docker/maven/conf vim settings.xml
-
配置阿里云镜像(自选,配置了下载会快点)
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
<localRepository>/root/docker/repository/repo</localRepository>
-
4、jenkins安装
安装jenkins之前,必须安装好maven
-
拉取jenkins镜像
docker pull jenkins/jenkins:lts-alpine
-
在/root/docker下创建 Jenkins目录
cd /root/docker mkdir jenkins
-
给Jenkins文件夹授权(不授权的话,后面jenkins会找不到jdk和maven目录)
chown -R root:root jenkins/
-
创建Jenkins容器,把容器里面的8080和50000端口映射为18080和50000,挂载jenkins_home和maven目录,同时设置Jenkins的时区为上海
docker run -d -p 18080:8080 -p 50000:50000 --privileged=true -u root -v /root/docker/jenkins:/var/jenkins_home -v /root/docker/maven:/usr/local/apache-maven -v /usr/local/java/jdk1.8.0_261:/usr/local/java/jdk1.8 -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai --name myjenkins jenkins/jenkins:lts-alpine
注意,在Jenkins中配置的jdk和maven的路径应为后面docker容器映射的路径:
jdk: /usr/local/java/jdk1.8
maven:/usr/local/apache-maven
-
在浏览器中输入宿主机ip:18080进入Jenkins
http://192.168.220.3:18080/
第一次进入需要获取初始密码
#进入Jenkins目录 cd /root/docker/jenkins #查看密码 cat secrets/initialAdminPassword
先别急着安装依赖
1、解决离线问题
#修改/root/docker/jenkins下的hudson.model.UpdateCenter.xml 文件 将 url 中 https://updates.jenkins.io/update-center.json 更改为 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 是国内的,清华大学的镜像地址。
2、解决插件安装很慢的问题
#Jenkins 在启动的时候需要安装一些插件,下载速度很慢不说还很多报错,下面是解决办法: #找到 default.json 文件 #在 Jenkins 的安装目录里查找 find . -name default.json
进入该目录
#替换 default.json 中的内容 #将 updates.jenkins-ci.org/download 替换为 mirrors.tuna.tsinghua.edu.cn/jenkins, #将 www.google.com 替换为 www.baidu.com, #具体命令如下: sed -i 's/www.google.com/www.baidu.com/g' default.json sed-i 's/updates.jenkins-ci.org\/download/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json #重启 Jenkins docker restart jenkins的容器id
-
现在可以登录安装依赖了
二、jenkins 环境配置
给jenkins配置jdk和maven
- 进入系统管理—全局工具配置
-
因为我们的jenkins是docker安装的,所以要注意路径均为docker容器中映射的路径而非宿主机的路径
-
配置settings
-
配置maven
去掉自动安装
-
配置jdk
去掉自动安装
-
-
进入系统管理—系统配置
配置环境变量
至此jdk和maven环境已配置完成
三、完成maven环境的自动化部署配置
-
修改宿主机的docker配置,让其可以远程访问
vim /lib/systemd/system/docker.service
根据docker版本不同配置文件也不同
情况1:
情况2:
-
刷新配置,重启服务
systemctl daemon-reload systemctl restart docker 要记得把之前没有设置为开机启动的容器重新启动,如本地仓库容器 或者设置为自启动: docker update 容器id --restart=always
-
在项目代码的pom文件指定编译脚本(开发人员工作),会生成一个dockerfile脚本完成镜像上传和打包。
这里以上一篇springsecurity的demo为例
- 修改pom.xml文件
<build> <finalName>app</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.2.6.RELEASE</version> </plugin> <!-- docker的maven插件,官网: https://github.com/spotify/docker‐maven‐plugin--> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <configuration> <imageName>192.168.220.3:5000/${project.artifactId}:${project.version}</imageName> <baseImage>jdk1.8</baseImage> <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> <dockerHost>http://192.168.220.3:2375</dockerHost> </configuration> </plugin> </plugins> </build>
其中要修改的地方如下
#192.168.220.3改为自己宿主机的ip,192.168.220.3:5000为本地仓库的地址,不能去掉 <imageName>192.168.220.3:5000/${project.artifactId}:${project.version}</imageName> #这修改为宿主机的docker地址 <dockerHost>http://192.168.220.3:2375</dockerHost> #注意要将这两个端口都添加到防火墙的白名单中!!!
- 修改application.yml文件
spring: datasource: url: jdbc:mysql://mysql:3306/security_authority?useUnicode=true&characterEncoding=UTF-8 #172.17.0.5 username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver jpa: hibernate: ddl-auto: update show-sql: true server: port: 8888
给项目指定上端口号,将mysql的url的ip改为mysql,同理,如果有redis的就将ip改为redis
因为我们的jar包是部署在docker上的,所以他访问的应该是docker中mysql的ip地址,而非宿主机ip的地址,故这里使用一个变量“mysql”代替,在后面启动jar包时再通过参数注入的方式注入。后面会详细讲。
四、构建Jenkins的自动化安装部署任务
-
创建一个maven项目
如果没有这个选项,则进入系统管理中的插件管理
选择 “可选插件” 搜索maven,安装此插件
-
配置任务
在打包之前要将项目上传到github、gitlab或码云中,推荐使用码云,否则容易因为墙的原因,连不上GitHub导致打包时报错。
git中pom文件的路径
clean package docker:build -DpushImage
- 构建项目即可
进入任务,选择控制台输出,可以看到打包情况
-
运行镜像
docker images 查看镜像
启动镜像
docker run -p 8888:8888 -d --link=mysql5.7:mysql --name spring-security-demo 镜像id
mysql5.7是mysql容器的name,冒号后面的mysql对应url中的mysql变量
用来给上面application配置文件中mysql的url赋值
-
查看镜像
docker ps
#查看容器启动日志,如果启动不成功也可以通过查看日志纠错 docker logs -f -t --tail 1000 spring-security-demo
至此,jenkins自动部署项目已完成。
- 浏览器输入项目地址
可以看到访问主页成功!
五、常见问题
-
push镜像到本地registry时出现的500 Internal Server Error
-
检查远程访问有没有配置错误
systemctl status docker
-
禁用sellinux
/usr/sbin/sestatus -v 查看状态 setenforce 0 禁用
-