君玉自牧 君玉自牧
首页
  • Linux
  • Nginx
  • MySQL
  • Redis
  • Kafka
  • Docker
  • Jenkins
  • Oneindex
  • Bitwarden
  • Confluence
  • Photogallery
  • 智能手机
  • 上古卷轴
  • 健身记录
  • 站点相关
  • 未完待续
GitHub (opens new window)
首页
  • Linux
  • Nginx
  • MySQL
  • Redis
  • Kafka
  • Docker
  • Jenkins
  • Oneindex
  • Bitwarden
  • Confluence
  • Photogallery
  • 智能手机
  • 上古卷轴
  • 健身记录
  • 站点相关
  • 未完待续
GitHub (opens new window)
  • 技术架构

  • 桌面维护

  • 网络工程

  • 系统运维

  • 环境搭建

  • 容器编排

  • 持续集成

    • Nexus Repository 制品库
    • Gitlab 部署 & 服务配置
    • Jenkins 部署 & 服务配置
      • 部署安装
        • 1.Docker 安装
        • 2.YUM 安装
        • 3.离线安装
        • 3.1.解压安装 JDK11
        • 3.2.设置环境变量
        • 3.3.安装 Jenkins
        • 3.4.创建启动脚本
        • 4.版本升级
      • 二、基本设置
        • 1.初始化 Jenkins
        • 2.界面汉化
        • 3.备份迁移
        • 4.插件地址
      • 三、构建相关
        • 1.Git
        • 2.NodeJS
        • 3..NET
        • 4.Java
        • 5.邮件通知
      • 四、故障处理
        • Q:AWT is not properly configured on this server.
        • Q:Host key verification failed
        • Q:Webhook 报错 403
        • Q:Jenkins 安全设置后报“HTTP Status 404 jacegisecurity_check”,导致无法登录
      • 五、服务打包
    • Sonarqube 部署 & 服务配置
    • 用 Jenkins 构建 .NET 项目
    • 用 Jenkins 构建 VUE 项目
    • 用 Jenkins 构建 Java 项目
  • 监控告警

  • 项目实践

  • 脚本开发

  • 前端开发

  • 后端开发

  • 效率工具

目录

Jenkins 部署 & 服务配置

Jenkins 是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件;支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。

Jenkins 用户手册 (opens new window)

# 部署安装

# 1.Docker 安装

docker search jenkins
docker pull jenkins/jenkins:lts
#映射本地数据卷时,/data/jenkins_home/ 目录的拥有者为 root 用户,容器中 jenkins 用户的 uid 为 1000。
#mkdir -p /data/jenkins_home
#chown -R 1000:1000 /datajenkins_home/
docker volume create jenkins_data
docker run -d \
    -p 8080:8080 \
    -p 50000:50000 \
    --name jenkins \
    --restart=always \
    -u app \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v jenkins_data:/var/jenkins_home  \
    jenkins/jenkins:lts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 2.YUM 安装

yum install java-1.8.0-openjdk
yum install java-11-openjdk
yum install fontconfig

wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
导入 rpm 密钥
rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
yum clean all
yum makecache
yum -y install jenkins
1
2
3
4
5
6
7
8
9
10

报错:“Delta RPMs disabled because /usr/bin/applydeltarpm not installed.”

执行 yum install deltarpm 继续安装
PS.如果报错:No Presto metadata available for Jenkins,这是没有重建 YUM 源缓存,重建继续安装;或者浏览器直接访问 https://get.jenkins.io/redhat/ (opens new window) 下载 rpm 文件安装:

wget https://get.jenkins.io/redhat/jenkins-2.313-1.1.noarch.rpm
rpm -ivh jenkins-2.313-1.1.noarch.rpm
1
2

image.png

yum install -y epel-release
yum install -y daemonize
1
2

配置文件:/etc/sysconfig/jenkins 程序目录:/usr/lib/jenkins/ rpm -ql jenkins 查询安装路径 注意:如果要修改端口,先修改网页再更改配置文件,否则无法访问。

# 3.离线安装

提前准备好 OpenJDK11、Jenkins 安装包及自动部署所需插件等

  • OpenJDK-11.0.2 (opens new window)
  • Jenkins-2.346.1 (opens new window)
  • fontpackages、sshpass:yum install fontconfig 更多 RPM 包请点击 (opens new window)查找

# 3.1.解压安装 JDK11

mkdir -pv /app/service
tar -zxvf openjdk-11.0.2_linux-x64_bin.tar.gz -C /app/service
mv /app/service/jdk-11.0.2 /app/service/jdk11
1
2
3

# 3.2.设置环境变量

echo "export JAVA_HOME=/app/service/jdk11" >>  ~/.bashrc
echo "export CLASSPATH=\$CLASSPATH:\$JAVA_HOME/lib" >>  ~/.bashrc
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >>  ~/.bashrc
source  ~/.bashrc
java -version
1
2
3
4
5

多版本请直接使用完整路径

# 3.3.安装 Jenkins

如果能联网的话,直接服务器下载 WAR 包,不行下载好上传至服务器

wget https://updates.jenkins.io/download/war/2.346.1/jenkins.war
mkdir -pv /app/service/jenkins && mv jenkins.war /app/service/jenkins/
mkdir -pv /app/data/jenkins && mkdir -pv /app/logs/jenkins
#查看启动参数
cd /app/service/jenkins && /app/service/jdk11/bin/java -jar jenkins.war --help
1
2
3
4
5

# 3.4.创建启动脚本

jenkins_service.sh

#!/bin/bash
set -ue

#全局变量
APP_NAME="Jenkins"
APP_FILE="jenkins.war"
APP_PROT="8888"
APP_LOG="/app/logs/jenkins/jenkins.log"
APP_HOME="/app/data/jenkins"
APP_OPTS="--httpPort=${APP_PROT}"
JAVA_BIN="/app/service/jdk11/bin"
JAVA_OPTS="-server -Xms2g -Xmx2g -Xss512k -Xmn1g -DJENKINS_HOME=${APP_HOME}"

if [ "${#}" -lt 1 ]; then
    echo -e "\033[0;31mNone Options! \033[0mUsage Options: \033[0;34m[start|stop|restart|status]\033[0m"
    exit 1
fi

function start() {
    APP_PS=`ps -ef | grep java | grep $APP_FILE | grep -v grep | wc -l`
    APP_PID=`ps -ef | grep java | grep $APP_FILE | grep -v grep | awk '{print $2}'`
    if [ ${APP_PS} != 0 ]; then
        echo -e "${APP_NAME} Service is Running! PID:\033[0;34m${APP_PID}\033[0m"
    else
        echo -e "\033[0;31mStarting ${APP_NAME} Service...\033[0m"
        nohup ${JAVA_BIN}/java ${JAVA_OPTS} -jar ${APP_FILE} ${APP_OPTS} >> "${APP_LOG}" 2>&1 &
	APP_PID=`ps -ef | grep java | grep $APP_FILE | grep -v grep | awk '{print $2}'`
        if [ "$?" -eq 0 ]; then
	    echo -e "${APP_NAME} Service Start Successful! PID:\033[0;34m${APP_PID}\033[0m"
	else
	    echo -e "${APP_NAME} Service Start Failed! See Logs for Details: ${APP_LOG}."
	fi
    fi
}

function stop() {
    APP_PID=`ps -ef | grep java | grep $APP_FILE | grep -v grep | awk '{print $2}'`
    if [ "${APP_PID}" ]; then
        echo -e "\033[0;31mStopping ${APP_NAME} Service...\033[0m"
        kill -9 ${APP_PID}
	echo -e "${APP_NAME} Service Stop Successful!"
    else
	echo -e "${APP_NAME} Service is not Running, Use \033[0;34m<start>\033[0m to Run."
    fi
}

function restart() {
    APP_PS=`ps -ef | grep java | grep $APP_FILE | grep -v grep | wc -l`
    if [ ${APP_PS} = 0 ]; then
        start
    else
	stop
	sleep 1
	start
    fi
}

function status() {
    APP_PS=`ps -ef | grep java | grep $APP_FILE | grep -v grep | wc -l`
    APP_PID=`ps -ef | grep java | grep $APP_FILE | grep -v grep | awk '{print $2}'`
    echo -e "\033[0;31mChecking ${APP_NAME} Service...\033[0m"
    if [ ${APP_PS} != 0 ];then
        echo -e "${APP_NAME} Service is Running! PID:\033[0;34m${APP_PID}\033[0m"
    else
        echo -e "${APP_NAME} Service is not Running, Use \033[0;34m<start>\033[0m to Run."
    fi
}

case $1 in
    "start")
        start
        ;;
    "stop")
        stop
	;;
    "restart")
        restart
	;;
    "status")
        status
	;;
    *)
    echo -e "\033[0;31mInvalid Options! \033[0mUsage Options: \033[0;34m[start|stop|restart|status]\033[0m"
    ;;
esac
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85

添加可执行权限

chmod +x jenkins_service.sh
#启动服务
./jenkins_service.sh start
#停止服务
./jenkins_service.sh stop
#重启服务
./jenkins_service.sh restart
1
2
3
4
5
6
7

# 4.版本升级

直接替换目录下的 WAR 包即可

systemctl stop jenkins
cd /usr/lib/jenkins
cp jenkins.war jenkins.war.2.346.1
wget https://updates.jenkins.io/download/war/2.375.2/jenkins.war
chmod +x jenkins.war
systemctl start jenkins
1
2
3
4
5
6

离线安装的除了文件目录和启动脚本不一样,其他是一样的

# 二、基本设置

# 1.初始化 Jenkins

启动成功以后,浏览器输入ip:8080进入页面 image.png 使用以下命令获取初始密码

 docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword
1

选择插件进行安装,离线安装的跳过此步骤,直接去看3.备份迁移
image.png

等待安装,失败了也没关系,后续可以修改插件中心地址重新安装或者直接将插件拷贝到相应的目录下
image.png
image.png

# 2.界面汉化

安装好插件 Locale 和 Localization: Chinese (Simplified) 后,先设置为 zh_US 重新启动,再设置回来;其他插件重启 Jenkins 后,又出现了部分中文简体不翻译的情况;方法如下,可以完美修复。

  • 将语言设定为 zh_US,Jenkins 切换为英文
  • 调用 restart 重启 Jenkins:http://域名/restart)
  • 再次语言设定为 zh_CN,刷新即可

# 3.备份迁移

网页登录,系统管理->配置,查看并主目录:/app/data/jenkins,打包需要备份的目录和文件即可

  • config.xml:配置
  • jobs 文件夹:工程
  • users 文件夹:用户
  • plugins 文件夹:插件,jpi 或者 hpi 即可

然后重启:systemctl restart jenkins

# 4.插件地址

维护方 镜像中心地址
官方 https://updates.jenkins.io/current/update-center.json (opens new window)
官方 https://updates.jenkins.io/experimental/update-center.json (opens new window)
Jenkins 中文社区 https://updates.jenkins-zh.cn/update-center.json (opens new window)
清华大学 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json (opens new window)
华为开源镜像站 https://mirrors.huaweicloud.com/jenkins/updates/update-center.json (opens new window)
腾讯 https://mirrors.cloud.tencent.com/jenkins/updates/update-center.json (opens new window)
USTC https://mirrors.ustc.edu.cn/jenkins/updates/update-center.json (opens new window)
BIT https://mirror.bit.edu.cn/jenkins/updates/update-center.json (opens new window)

# 三、构建相关

所在服务器需要安装 git 客户端:yum -y install git

# 1.Git

服务器生成 SSH 密钥:ssh-keygen -t rsa -b 4096,还可以拷贝到目标服务器做免密码登录
然后服务器的私钥用来创建 SSH 凭据,点击下图红框按钮进行添加: image.png

选中“SSH Username with private key”,然后下拉到“Private Key”部分,点击“Add”进行添加。 cat /root/.ssh/id_rsa image.png
image.png

Gitlab 设置部署密钥:cat /root/.ssh/id_rsa.pub image.png
image.png

# 2.NodeJS

系统管理->全局工具配置->NodeJS->NodeJS 安装,选择需要的版本,全局 NPM 安装设置为:npm install --registry=https://registry.npm.taobao.org image.png

# 3..NET

编译.NET应用程序可通过微软提供的 MSBuild 工具,安装 MSBuild 插件的同时 Jenkins 服务器还需安装 MSBuild

  • Windows 系统可以安装 VS 开发工具 (opens new window),构建出问题的时候打开 VS 调试
  • Linux 系统先安装 Core (opens new window) 或者 Mono (opens new window)
rpmkeys --import "http://pool.sks-keyservers.net/pks/lookup?op=get&search=0x3fa7e0328081bff6a14da29aa6a19b38d3d831ef"
su -c 'curl https://download.mono-project.com/repo/centos7-stable.repo | tee /etc/yum.repos.d/mono-centos7-stable.repo'
yum install mono-devel mono-complete
1
2
3

上述第一步导入密钥失败,跳过也能安装,后续会自动导入
image.png

插件安装完毕后,进入系统管理->全局工具配置(ConfigureTools)找到 MSBuild 配置选项,并点击新增 MSBuild按钮
image.png

运行whereis xbuild查看 Jenkins 中 Path to MSBuild 的位置
image.png

Dashboard -> Manage Jenkins -> Configure Global Security
image.png

管理分配角色
image.png

# 4.Java

构建Java 需要先安装 Maven

# 5.邮件通知

安装 Email Extension Template 插件,设置系统管理员邮件地址,移动到邮件通知
image.png

配置要通知的 Job,构建后操作
image.png

# 四、故障处理

# Q:AWT is not properly configured on this server.

A:https://wiki.jenkins.io/display/JENKINS/Jenkins+got+java.awt.headless+problem (opens new window)

# Q:Host key verification failed

A:cat /etc/passwd 可以看到 Jenkins 普通用户无法执行某些系统命令并且没有为 Jenkins 生成过密钥对,也没有将公钥拷到目标服务器上

sed -i 's/jenkins:\/bin\/false/jenkins:\/bin\/bash/g' /etc/passwd
su jenkins
ssh-keygen -t rsa -b 4096
ssh-copy-id -i /var/lib/jenkins/.ssh/id_rsa.pub root@IP
1
2
3
4

# Q:Webhook 报错 403

A:全局设置 -> 关闭防止跨站请求(高版本需要添加以下启动参数):

vim /etc/sysconfig/jenkins
-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true
1
2

image.png image.png

# Q:Jenkins 安全设置后报“HTTP Status 404 j_acegi_security_check”,导致无法登录

A:vim /var/lib/jenkins/congi.xml

<useSecurity>false</useSecurity>
1

image.png

# 五、服务打包

在部署一套新的 Jenkins 环境时, 会需要安装大量插件, 非常影响部署速度, 同时插件是否能正常下载也存在不确定性。

Custom WAR Packager 允许用户将 Jenkins 、配置、插件打包成一个完整的 war 包或者镜像。这样无论是开发测试, 还是线上部署, 都可以很方便的部署, 并且环境一致, 而用户只需要写一个 yaml 文件。

网页编辑 (opens new window)
最近提交: 2023/03/22, 11:52:35
Gitlab 部署 & 服务配置
Sonarqube 部署 & 服务配置

← Gitlab 部署 & 服务配置 Sonarqube 部署 & 服务配置→

Theme by Vdoing | Copyright © 2011-2023 | 君玉自牧
粤ICP备15057965号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式