Bootstrap

jenkins部署手册

一、环境配置

资源配置

操作系统

18.04.6 LTS (Bionic Beaver)

资源配置

服务器

CPU: 8核

内存: 16 GB

磁盘: 300 GB sda[系统盘] 100GB, 默认分区

sdc[数据盘] 200GB 挂载点 /data

备注:数据盘需支持扩展

备注:无。

二、jenkins软件部署

2.1 下载软件包

jenkins官网下载地址

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

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

# 解压 
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

创建软连接

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

[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 修改插件源(非必要不修改)

没有必要修改,如果你访问官网环境很差,可参考修改。

  1. 修改url为:

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

  1. 修改default文件

把里面的连接修改下

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库;

需要先配置用户名密码

</servers>
   <server>
      <id>ccdc-dev</id>
      <username>dev-normal-01</username>
      <password>******</password>  
    </server>
  </servers>

再配置镜像源,注意id需要对应上

<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文件中

image-20241030184529756

即可连接上对应的服务器;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

1. 先创建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的教程可参考:

docker部署手册(离线)

2. Send files or execute commands over

  1. 配置参数与上述的选项参数关联

注意:这个插件的参数Source files 是针对工作空间来说的,并不支持绝对路径

把选项中的四台服务器均配置上去。

2.4.5 构建后操作

完全是为了节省磁盘空间.

至此部署配置完成;

;