一、环境说明
服务 | 所需软件 | 部署地址 |
---|---|---|
持续集成服务 | Jenkins 2.319.1、Maven3.6.3,Git | 47.107.225.126 |
应用测试服务 | JDK1.8 | 47.107.225.126 |
二、安装配置
1、安装git
查看是否已经安装
git --version
使用yml安装
yum -y install git
2、安装jdk1.8
查看当前是否有安装jdk
-
maven和项目,jekenis都java项目肯定需要java环境
java -version
安装jdk1.8
yum install java-1.8.0-openjdk* -y
-
安装完以后,默认的路径是: /usr/lib/jvm
-
提醒:建议不要安装jdk11。
PATH=/bin:/www/download/jdk8/jdk1.8.0_281/bin
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/www/download/jdk8/jdk1.8.0_281/bin
3、安装maven依赖
去官网下载自己想要的maven包
地址: Maven – Download Apache Maven
各版本地址:Index of /dist/maven/maven-3
我以apache-maven-3.6.3-bin.tar.gz为例,
下载地址: https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
将maven上传liunx服务器上,当前的安装目录root如下:cd /www/servers
mkdir -p /www/servers/maven
cd /www/servers/maven
上传完毕,执行解压
wget https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
如果下载很慢建议用手动的方式上传到/www/servers/maven
#解压文件
tar -xzvf apache-maven-3.6.3-bin.tar.gz
#创建目录,用于存放maven
mkdir -p /opt/maven
#将解压完的maven文件剪切到刚刚创建的目录下
mv apache-maven-3.6.3/* /opt/maven
建议配置:阿里云的maven镜像。仓库服务 步骤:在conf/setttings.xml中配置如下:
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>aliyunrepositoty</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
配置maven环境变量
安装完maven,还需要配置java和maven的环境变量。就放在文件的尾部即可
首先打开环境配置文件
vim /etc/profile
配置内容
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export MAVEN_HOME=/opt/maven
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
执行保存生效
source /etc/profile
查看maven版本
mvn -v
4、安装jenkins
官网地址:Jenkins download and deployment
如果之前有安装过jenkins的可以用下面方式进行卸载在操作上面的命令:
cd /root
#卸载之前残留的jenkins
rpm -e jenkins
find / -iname jenkins | xargs -n 1000 rm -rf
#查看是否卸载完毕
rpm -ql jenkins
centos安装jenkins如下
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install epel-release # repository that provides 'daemonize'
yum install jenkins
在安装时出现了一下问题,当我们使用 wget命令下载不安全的https 域名下的内容时会提示如下内容:
cannot verify pkg.jenkins.io's certificate, issued by ‘/C=US/O=Let's Encrypt/CN=R3’
Issued certificate has expired. To connect to pkg.jenkins.io insecurely, use `--no-check-certificate'.
12
修复方法
sudo yum install -y ca-certificates
jenkins配置
jenkins默认安装的配置目录在:/etc/sysconfig/jenkins
#安装完毕,进入到jenkins配置文件内,配置端口及用户名
vim /etc/sysconfig/jenkins
#找到这两行,修改成指定的端口
JENKINS_USER="用户名"
#示例: root
JENKINS_PORT="端口号"
#示例: 9999
#修改完毕,执行保存
wq!
#保存完毕,启动jenkins服务
systemctl start jenkins
#查看启动状态
systemctl status jenkins
注意在启动过程中出现了java环境找不到问题:解决方案https://blog.csdn.net/zwjzone/article/details/125170820
创建软链接 ln -s /usr/local/java/jdk1.8.0_291/bin/java /usr/bin/java
还存在一个问题是修改了端口号不生效,如下图,最终解决进入红框圈选的文件进行修改端口号,再systemctl daemon-reload
三、启动Jenkins
启动完,等待一分钟左右,访问刚刚配置的地址: http://服务器ip:刚刚配置的端口号/ 示例: http://47.107.225.126:8088/
提醒:8088端口必须在你对应的云服务器的安全组中开放8088的端口和 上面docker链接的2280的端口都要将其开放。
解锁 Jenkins
根据提示:在服务器输入
cat /var/lib/jenkins/secrets/initialAdminPassword
复制出密码点击继续
自定义Jenkins
创建管理员账号
实例配置
这步是告诉你的jenkins访问地址,记住一下。
Jenkins控制面板
配置镜像源
在管理页面依次进入: Jenkins->Manage Jenkins->Manage Plugins
点击【高级】
链接: https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
最后重启jekins
配置凭据 - 全局Git账号和密码管理
配置你代码所在的gitee的账号和密码即可,这里仅仅只是一个保存账号和密码存档的小工具而已。给后续的配置提供一个便签,后续就不需要在输入账号和密码了。 配置完毕。也是为了安全性考虑。
这个ID等下在jenkinsfile文件中,代码的下载需要这个id来进行关联。也就是通过id找到你的账号和密码,然后去远程下载代码。
配置环境变量
当我们拉取项目以后,需要用到maven对我们的项目进行构建,我们已在虚拟机上安装了java环境和maven环境,我们需要在jenkins配置应用上去,进入到全局工具配置
配置jdk
名称可以随意填,JAVA_HOME是虚拟机配置的JAVA_HOME路径,可以通过以下命令查看
echo $JAVA_HOME
配置maven
然后配置
名称可以随意填,MAVEN_HOME是虚拟机配置的MAVEN_HOME路径,可以通过以下命令查看
echo $MAVEN_HOME
Jenkins关联环境变量和设置常量
就是给Jenkinsfile设置的常量。而这常量我可以在Jenkinsfile文件中用${xxx}
此外,我们还需要将环境变量配置到jenkins(重要步骤)
-
找到: Jenkins ==> 系统管理 ==> 系统配置
-
找到全局属性,将配置的环境路径,挨个拷贝过来
此时,jenkins的maven环境、git环境都已搭建好,考虑到我们需要发布服务,所以还需要安装docker
Pipeline插件安装
这些准备就绪,就可以开始发布服务,但是我们没有一个调度者的角色去自动化完成它,所以这里jenkins需要安装Pipeline插件,同样取插件商店安装此插件
1、Pipeline 脚本是由 Groovy 语言实现的,但是我们没必要单独去学习 Groovy
2、Pipeline 支持两种语法:Declarative(声明式)和 Scripted Pipeline(脚本式)语法
3、Pipeline 也有两种创建方法:可以直接在 Jenkins 的 Web UI 界面中输入脚本;也可以通过创建一
个 Jenkinsfile脚本文件放入项目源码库中(一般我们都推荐在 Jenkins 中直接从源代码控制(SCM)
中直接载入 Jenkinsfile Pipeline 这种方法)
利用Pipeline自动化发布服务
点击新建任务,填写项目名称,选择流水线,点击确认
开始构建
进去可以看到此页面,我们待会需要编写脚本,脚本的变量可以在脚本中生成,也可以在此页面填写,我待会会逐一介绍,填写项目描述,点击参数化构建项目
这里的参数是很灵活的,可以是选中框,也可以是文本框等
一般我们的分支名称是固定的,不会有改变,我们可以在这添加一个选项参数
一般多个,可以用换行符分隔,第一行会作为默认选项
往下拉可以保存看看效果
点击build,可以看到此页面。可以选择
配置端口映射
我们要向发布一个端口,我们就还需要一下参数: 我们要发布哪个项目?发布的端口号多少?
我们采用docker发布项目,则会有两个端口,容器内部的服务端口,docker映射用于访问的端口,这里可能会有变动,有些时候需要自己制定端口,所以我们采用字符串参数
该有的参数都已经准备完毕,接下来要做的就是拉取代码
往下拉到底找到流水线,或者直接点击
选择SCM模式
如果你有安装git,那么你的界面应该是这样的
保存完成,选择轻量级导出,脚本路径看自己的存放位置,相对路径是项目根目录,我这里以根目录展示,点击保存,脚本路径一定要记好,我这里代表根目录下的名字叫Jenkinsfile的文件
创建完以后保存,页面应该是这样子的
四、创建Jenkinsfile
往项目根目录创建一个Jenkinsfile文件,与刚刚的配置对应,然后开始编写
//git凭证ID
def git_auth = "xxxx-54a1-4474-a953-934de62262dd"
//git的url地址
def git_url = "https://gitee.com/kekesam/xxx.git"
//镜像的版本号
def tag = "0.0.1-SNAPSHOT"
node {
stage('拉取代码') {
checkout([$class: 'GitSCM', branches: [[name: "*/${branch}"]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_url}"]]])
}
stage('编译 安装公共实体bean') {
sh "mvn clean install -Dmaven.test.skip=true"
}
stage('工程编译') {
//定义项目名称+镜像的版本号,对镜像名称进行拼接
def imageName = "${project_name}:${tag}"
// 编译打包开始
sh "mvn clean package -Dmaven.test.skip=true dockerfile:build "
//对镜像打上标签
sh "docker tag ${imageName} ${imageName}"
}
stage('docker部署') {
//镜像名称
def imageName = "${project_name}:${tag}"
//删除原有容器
sh "docker rm -f ${project_name}"
// 创建一个容器映射的目标
sh "mkdir -p /opt/docker/${project_name}"
//容器加一层挂载目录
sh "docker run -di -v /opt/docker/${project_name}/opt:/opt --name ${project_name} -p ${host_port}:${container_port} ${imageName}"
}
stage('启动并监控日志') {
sh "docker logs -f ${project_name}"
}
}
然后提交项目即可
五、然后在jenkins的控制台中
查看日志
说明成功,然后在浏览器访问对应的接口,如果访问都能正常说明部署成功了
后面的步骤周而复始即可。
-
修改代码
-
提交代码到gitee上
-
在jenkins发布和启动即可
-
访问接口
启动过程中出现的问题
问题一、Jenkins权限缺失导致无法创建镜像
解决方案添加权限
chown -R jenkins /文件路径
如果依旧存在权限报错,就给jenkins添加相应权限
问题二、
各个端口解释
application.yml中server.port=8044端口被dockerfile文件中
8813端口给覆盖,而最终Jenkins中配置端口时,容器端口为8813,但是实际开放的端口是8001端口,我们需要在安全组放行8001端口,即可得到访问。