使用Jenkins做部署之前,需要安装jdk和maven,docker私有仓库,项目需要连接数据库就要安装数据库如mysql
docker安装教程百度上很多,这里就不讲了。
在命令行窗口执行拉取镜像命令
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
个人喜欢使用手动安装,方便后面配置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 为你压缩包解压后的文件夹的路径
#查看java版本
java -version
#查看java根路径
echo $JAVA_HOME
拉取私有仓库镜像
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
在线下载
# 我安装的目录为 /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
配置阿里云镜像(自选,配置了下载会快点)
alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central
/root/docker/repository/repo
安装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配置jdk和maven
因为我们的jenkins是docker安装的,所以要注意路径均为docker容器中映射的路径而非宿主机的路径
进入系统管理—系统配置
配置环境变量
至此jdk和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为例
app
org.springframework.boot
spring-boot-maven-plugin
2.2.6.RELEASE
com.spotify
docker-maven-plugin
0.4.13
192.168.220.3:5000/${project.artifactId}:${project.version}
jdk1.8
["java", "-jar", "/${project.build.finalName}.jar"]
/
${project.build.directory}
${project.build.finalName}.jar
http://192.168.220.3:2375
其中要修改的地方如下
#192.168.220.3改为自己宿主机的ip,192.168.220.3:5000为本地仓库的地址,不能去掉
192.168.220.3:5000/${project.artifactId}:${project.version}
#这修改为宿主机的docker地址
http://192.168.220.3:2375
#注意要将这两个端口都添加到防火墙的白名单中!!!
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包时再通过参数注入的方式注入。后面会详细讲。
如果没有这个选项,则进入系统管理中的插件管理
选择 “可选插件” 搜索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自动部署项目已完成。