文章目录
- 一、环境配置
- 二、jenkins软件部署
-
- [2.1 下载软件包](#2.1 下载软件包)
- [2.2 启动jenkins](#2.2 启动jenkins)
-
- [2.2.1 准备jdk环境](#2.2.1 准备jdk环境)
- [2.2.2 准备maven环境](#2.2.2 准备maven环境)
- [2.2.3 编写jenkins.service](#2.2.3 编写jenkins.service)
- [2.3 配置jenkins](#2.3 配置jenkins)
-
- [2.3.1 修改插件源(非必要不修改)](#2.3.1 修改插件源(非必要不修改))
- [2.3.2 配置环境变量](#2.3.2 配置环境变量)
- [2.3.3 配置Publish over SSH](#2.3.3 配置Publish over SSH)
- [2.3.4 配置邮箱](#2.3.4 配置邮箱)
- [2.4 创建job](#2.4 创建job)
-
- [2.4.1 新建job](#2.4.1 新建job)
- [2.4.2 参数化构建](#2.4.2 参数化构建)
- [2.4.3 源码管理](#2.4.3 源码管理)
- [2.4.4 build steps](#2.4.4 build steps)
- [2.4.5 构建后操作](#2.4.5 构建后操作)
一、环境配置
资源配置
操作系统
18.04.6 LTS (Bionic Beaver)
资源配置
服务器
CPU: 8核
内存: 16 GB
磁盘: 300 GB sda[系统盘] 100GB, 默认分区
sdc[数据盘] 200GB 挂载点 /data
备注:数据盘需支持扩展
备注:无。
二、jenkins软件部署
2.1 下载软件包
https://get.jenkins.io/war-stable/2.426.2/jenkins.war
2.2 启动jenkins
2.2.1 准备jdk环境
详细安装可参考: 离线部署jdk8,jdk17, jdk21
由于最新的jenkins都是基于java17
,而我们项目还是用的Java8
进行编译,所以需要下载两个jdk。
下载地址:
https://adoptium.net/zh-CN/temurin/archive/?version=17
分别下载java17 和 java8 ,传入服务器
解压java17,java8
shell
mkdir -p /software/java/jdk8 && mkdir -p /software/java/jdk17
tar -xvf OpenJDK8U-jdk_x64_linux_hotspot_8u392b08.tar.gz
tar -xvf OpenJDK17U-jdk_x64_linux_hotspot_17.0.9_9.tar.gz
mv jdk8u392-b08/\* /software/java/jdk8
mv jdk-17.0.9+9/\* /software/java/jdk17
2.2.2 准备maven环境
版本:maven-3.6.3
shell
# 解压
tar -xvf apache-maven-3.6.3-bin.tar.gz
mv apache-maven-3.6.3 /software
# 配置环境变量
vim /etc/profile
export JAVA_HOME=/software/java/jdk8
export MAVEN_HOME=/software/apache-maven-3.6.3
export PATH=\$PATH:\$MAVEN_HOME/bin:\$JAVA_HOME/bin
source /etc/profile
备注: 最开始选用的是3.9.9最新版本,但由于项目在maven打包的时候报错,所以降版本选用了3.6.3
创建软连接
shell
root@guoqing:\~\# ln -s /software/apache-maven-3.6.0/bin/mvn /usr/bin/mvn
root@guoqing:\~\# ln -s /software/apache-maven-3.6.0/bin/mvn /usr/local/bin/mvn
因为Jenkins 通过shell脚本调用 mvn 命令的时候,是从/usr/bin 文件夹中找命令的;所以要建立这样的软链接
2.2.3 编写jenkins.service
vim /etc/systemd/system/jenkins.service
shell
[Unit]
Description=Jenkins
After=network.target
[Service]
ExecStart=/software/java/jdk17/bin/java -jar -DJENKINS_HOME=/data/jenkins -Xmx2g /software/jenkins/jenkins.war -Djava.awt.headless=true --httpPort=80
User=root
Restart=always
SuccessExitStatus=143
[Install]
WantedBy=default.target
写入以上内容,保存
创建文件夹
mkdir -p /software/jenkins && mkdir -p /data/jenkins
对应的war包放入/software/jenkins
文件夹中
systemctl daemon-reload
systemctl start jenkins
2.3 配置jenkins
由于使用root账号启动,所以可以用80端口,不需要nginx进行端口转发了。
访问 http://10.0.99.11 回车;会让你输入临时密码.
cat /data/jenkins/secrets/initialAdminPassword
安装必要插件
其中有两个插件需要额外的安装下
Git Parameter, Publish Over SSH
建议安装插件
Extended Choice Parameter Plugin(多选框)、Material Theme (好看的主题插件)
2.3.1 修改插件源(非必要不修改)
没有必要修改,如果你访问官网环境很差,可参考修改。
- 修改url为:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
- 修改default文件
把里面的连接修改下
shell
sed -i 's/http:\/\/updates.jenkins.ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
重启jenkins使其生效
systemctl restart jenkins
2.3.2 配置环境变量
配置jdk
配置maven
注意修改maven的配置文件settings.xml。
配置使用私有nexus库;
需要先配置用户名密码
xml
</servers>
<server>
<id>ccdc-dev</id>
<username>dev-normal-01</username>
<password>******</password>
</server>
</servers>
再配置镜像源,注意id需要对应上
xml
<mirrors>
<mirror>
<id>ccdc-dev</id>
<mirrorOf>*</mirrorOf>
<name>ccdc-私有镜像仓库</name>
<url>http://10.0.99.187:1****/repository/maven-public/</url>
</mirror>
</mirrors>
上述的地址和密码均做了模糊处理,在配置时改为自己的;
2.3.3 配置Publish over SSH
将生成的公钥内容复制到对应服务器的/root/.ssh/authorized_keys文件中
即可连接上对应的服务器;ssh免密登录。
比如10.0.99.124上已经配置了公钥。
提示连接成功。
2.3.4 配置邮箱
QQ邮箱授权码:smnhssleav****
jenkins邮件提醒
2.4 创建job
先看最终效果
可做到打包指定微服务,选择分支,发往哪台服务器中;做到更加灵活的配置。
2.4.1 新建job
坑:这里没有用构建一个maven项目。我没有安装maven的插件,因为此插件在近年发布的jenkins版本中已经不支持java8 了。至少需要java11的版本,而我们项目是基于java8的。会导致mvn打包的时候一直报错。
2.4.2 参数化构建
新建字符参数
service_name
新建字符参数
新建git参数
新建选项参数
这个选项参数可结合下方的Send files or execute commands over SSH
做到选择部署到哪台服务器。
2.4.3 源码管理
添加凭证即可,注意URL不能写错。
2.4.4 build steps
- 先创建shell脚本
shell
#!/bin/bash
echo `pwd`
echo "${git_branch}当前的git分支"
if [ "$service_name" = "numen-gateway" ]; then
/software/apache-maven-3.6.3/bin/mvn clean package -P ${mvn_profile} -pl ./numen-component/${service_name} -am -U -Dmaven.test.skip=true
else
/software/apache-maven-3.6.3/bin/mvn clean package -P ${mvn_profile} -pl ./numen-modules/${service_name} -am -U -Dmaven.test.skip=true
fi
if (( $? ))
then
echo "mvn package failed"
exit 1
else
echo "mvn package success"
echo '$service_name build start...'
local_path=`pwd`
target_local="${local_path}/images/"
mkdir -p $target_local
echo 'build image start'
_IID=$(docker images | grep "$service_name" | awk '{print $3}')
if [ -n "$_IID" ]; then
docker rmi "$_IID"
fi
if [ "$service_name" = "numen-gateway" ]; then
cd "${local_path}"/numen-component/"${service_name}" || exit
else
cd "${local_path}"/numen-modules/"${service_name}" || exit
fi
docker build -t "$service_name" .
echo "images目录为:${target_local}${service_name}.tar"
docker save -o "${target_local}${service_name}".tar "$service_name":latest
echo '部署完成'
fi
因为项目最终打包成docker镜像,所以服务器中也需要安装docker;
有关安装docker的教程可参考:
- Send files or execute commands over
- 配置参数与上述的选项参数关联
注意:这个插件的参数Source files 是针对工作空间来说的,并不支持绝对路径。
把选项中的四台服务器均配置上去。
2.4.5 构建后操作
完全是为了节省磁盘空间.
至此部署配置完成;