下面我将会详细介绍我的部署过程,其中遇到的一些坑或者关键点会用红字加粗标识,希望大家开心学习快乐每一天。
本篇文章是基于有完整开发项目能力却缺乏部署知识的开发人员学习分享,偏向于运维,小白的话可以边查找资料学习完成环境开发等搭建后再进行学习。
示例:www.cjjtools.com
也可以加QQ交流群:1065452972
我的服务器是腾讯云,配置如下:
开发软件:idea2020.1
开发语言:java(jdk1.8.0_221)
开发框架:Springboot+apache-maven-3.6.3
代码版本管理:git(gitee也是用的git)
以上都是一些必须且基础的环境,搭建方法就不再详细说明了
点击创建完成后进入仓库
执行以下代码,进行git项目初始化到远程gitee
一、初始化并创建本地git仓库
git init
二、将所有代码添加到本地仓库
git add .
三、添加提交时的注释
git commit - m "第一次提交"
四、将git进行远程连线
git remote add origin https://gitee.com/*********(您刚刚复制的那个gitee项目地址)
五、推代码更新远程仓库
git push -u origin master
至此就完成了将项目和gitee进行关联的操作
这里我们使用Xsell6进行对服务器的连接,大家可以取官网上申请家庭或学校版的Xshell(目前好像很多网上的破解版都用不了了)
获取方法:
进入网站:https://www.netsarang.com/zh/free-for-home-school/
安装完成后进入xshell连接您的服务器
将要配置的环境(此处的jdk和maven版本最好跟windows一样,避免不必要的错误):
docker: docker的安装我之前写过一篇文章:https://blog.csdn.net/q903249871/article/details/103275533
(不了解docker的也可以看一下docker的入门理解:https://blog.csdn.net/q903249871/article/details/103295332)
jdk:jdk1.8.0_221
maven:apache-maven-3.6.3
注:jdk和maven这种共用的环境直接安装到本地即可,不需要进行docker化,下面的docker容器里如需用到,运行时进行挂载即可使用到,就不在docker容器中再进行重复安装了,节省空间。
Jenkins:docker化镜像版本:jenkinsci/blueocean
mysql:docker化镜像版本:mysql
下面进行这些环境的安装介绍:
jdk配置:
到官网中下载:https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html
打开xshell点击xftp进行文件传输
tar -zxvf xxx
然后开始配置jdk环境变量
set java environment
JAVA_HOME=/usr/java/jdk1.8.0_221
JRE_HOME=/usr/java/jdk1.8.0_221/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
粘贴完成后按esc后输入:wq退出编辑
执行以下代码重新加载配置文件,使环境生效
source /etc/profile
输入java -version查看到以下输出,表示jdk配置成功
maven配置:
到官网中下载:http://maven.apache.org/download.cgi
下载完成后,跟jdk的操作方式一样,先拉到linux服务器对应的位置进行解压,然后配置环境变量保存刷新
export MAVEN_HOME=/usr/maven/apache-maven-3.6.3
export PATH=$MAVEN_HOME/bin:$PATH
刷新后输入
mvn -v
maven环境配置成功
mysql的docker镜像下载并运行
参考我的另一篇文章:https://blog.csdn.net/q903249871/article/details/106380566
jenkins的镜像安装
直接输入以下命令拉取jenkins
docker pull jenkinsci/blueocean
拉取成功后执行运行镜像
docker run -u root --rm -d -p 8080:8080 -p 50000:50000 -v /var/run/docker.sock:/var/run/docker.sock -v /usr/java/jdk1.8.0_221:/usr/java/jdk1.8.0_221 -v /usr/maven/apache-maven-3.6.3:/usr/maven/apache-maven-3.6.3 -v /usr/maven/maven-repository:/usr/maven/maven-repository -v /usr/webtools/jenkins/data:/var/jenkins_home jenkinsci/blueocean
注释(左边为你的服务器路径,右边为容器内路径):
-v /var/run/docker.sock:/var/run/docker.sock 挂载docker的守护进程,容器内部也能调用docker命令,且与外部docker同步
-v /usr/java/jdk1.8.0_221:/usr/java/jdk1.8.0_221 挂载为使用容器外部的jdk
-v /usr/maven/apache-maven-3.6.3:/usr/maven/apache-maven-3.6.3 挂载为使用容器外部的maven
-v /usr/maven/maven-repository:/usr/maven/maven-repository 挂载为使用容器外部的maven仓库
-v /usr/webtools/jenkins/data:/var/jenkins_home 把jenkins的文件同步挂载到你的服务器
运行成功后访问Jenkins地址:127.0.0.1:8080
下一步点安装推荐的插件,等待大概几分钟到十几分钟(取决于你服务器的网速)
创建新管理员用户(下次就用这个用户登陆)
此时就能进入到工作台界面了
第一步先配置你的全局变量
安装Jenkins对应Maven插件,插件名称Maven Integration
再安装对应的gitee插件
等待安装完成
完成后返回jenkins,点击新建任务
创建一个流水线任务
我的pipeline脚本如下:
node {
// 每一个stage都是一个步骤
stage('git checkout') { // 这一串是用来从gitee上拉取代码的,怎么来的我下面会说
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'xxxxxxxxxx', url: 'https://gitee.com/xxxxxxxxxx']]])
echo 'git checkout ok' // 日志而已
}
def mvnHome = tool 'maven-3.6.3'// 这里的名字是上面配置的全局配置别名
def javaHome = tool 'java_1.8.0_221'// 这里的名字是上面配置的全局配置别名
env.PATH = "${mvnHome}/bin:${javaHome}/bin:${env.PATH}" // 配置环境变量
stage('mvn build') {
echo 'mvn build start'
sh 'mvn clean package -Dmaven.test.skip=true -U' // 用maven打包你刚刚拉取到的项目
echo 'mvn build ok'
}
stage('docker build and run') {
sh 'docker rm -f webtools-8088||true' // 用maven打包你刚刚拉取到的项目
sh 'docker rmi webtools-8088||true'
sh 'docker build -t webtools-8088 .'
sh 'docker run -p 8088:8088 --privileged=true -v /usr/webtools/server/logs:/logs -v /usr/webtools/server/upload:/upload -v /usr/share/fonts:/usr/share/fonts --name webtools-8088 -d webtools-8088'
echo 'docker docker run ok'
}
}
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'xxxxxxxxxx', url: 'https://gitee.com/xxxxxxxxxx']]])
这一句话是使用下面方法生成的
sh 'docker rm -f webtools-8088||true' //这一句话是强行删除对应名字的容器,-f表示无论在不在跑都删除,||true是为了防止没有对应名字的容器,导致语句报错后也继续往下执行
sh 'docker rmi webtools-8088||true' //这一句话是删除对应名字的镜像,||true是为了防止没有对应名字的镜像,导致语句报错后也继续往下执行
sh 'docker build -t webtools-8088 .' //这一句话创建这个名字的镜像;这里要说明一下,我的Dockerfile是放在了项目的根目录下面的,而现在执行pipeline语句的路径就是在项目的根目录下,所以我可以直接写一个.(当前目录寻找Dockerfile的意思)他就会找到这个Dockerfile
sh 'docker run -p 8088:8088 --privileged=true -v /usr/webtools/server/logs:/logs -v /usr/webtools/server/upload:/upload -v /usr/share/fonts:/usr/share/fonts --name webtools-8088 -d webtools-8088' // 我这里因为功能需要,我是有导入导出功能的,并且要用到服务器的字体库,所以我挂载了一个/usr/webtools/server/upload(我的上传下载目录),/usr/share/fonts服务器的字体库
写好之后点击应用保存
现在就可以开始构建啦!
最后祝大家好好学习天天向上,再推一遍群号
QQ交流群:1065452972