跳到主要内容

Jenkins自动化部署

安装

centos安装

wget https://get.jenkins.io/war-stable/2.452.2/jenkins.war

写一个脚本启动:

需要把jenkins和Java的目录替换为自己的

#!/bin/bash

# 指定jenkins.war目录
JENKINS_HOME=/root/tools/jenkins

#指定运行的jdk版本(此处是为 Jenkins单独使用 的jdk);本机环境配置的是 1.7
JAVA_HOME=/root/tools/java/jdk-21.0.3

# 运行 war 指定端口 和在当前目录(jenkins.sh的目录)下生成日志文件
nohup $JAVA_HOME/bin/java -jar $JENKINS_HOME/jenkins.war --httpPort=8085 2>&1 &

初始jenkins密码:

cat /root/.jenkins/secrets/initialAdminPassword

Docker安装

version : '3'
services:
jenkins:
user: root
restart: always
image: jenkins/jenkins
container_name: jenkins1
ports:
- 8085:8080
- 50000:50000
volumes:
- ./jenkins_home/:/var/jenkins_home/
# 将本地的docker挂载到容器里面,给jenkins使用
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
- /etc/docker/daemon.json:/etc/docker/daemon.json
# 将Jenkin中的公钥私钥挂载出来,用于GitHub等
- ./.ssh:/root/.ssh
# 将服务器的maven挂载到容器里面
- /root/tools/apache-maven-3.6.3:/root/apache-maven-3.6.3
- /root/.m2:/root/.m2

基本安装

Docker启动之后,输入密码,安装推荐插件

image-20240619172919356

安装SSH插件:

image-20240619174210864

配置jenkins密钥

进入jenkins的终端

配置密钥主要是为了去拉取GitHub的代码

ssh-keygen -t rsa -C "root"

image-20240619203144511

结果会得到id_rsaid_rsa.pub两个文件

将公钥id_rsa.pub放入GitHub中

https://github.com/settings/keys

image-20240619205100693

拉取私有代码:

image-20240619205656597

插件安装

image-20240707093932436

更换插件源

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

然后重启:

http://ip:port/restart

需要用到的插件:

添加凭据

image-20240619210454662

这里填GitHub的账号密码:

image-20240619210624862

配置Java

image-20240619211845912

配置Maven

image-20240619211851177

配置环境变量

主要是nodejs等环境,jenkins 不会继承终端里的环境变量,需要自己去source或者配置

在系统配置中添加:

image-20240730073452717

自动拉取GitHub代码进行构建

后端部署

新建一个任务,自由风格或者maven项目

image-20240707094657986

填写Git地址:

image-20240721003158483

选择构建环境:

image-20240721003212469

使用maven构建项目,然后将jar包拷贝到指定位置,启动程序

image-20240721003224911

我这里有一个启动Java项目的脚本,在启动前可以先杀死程序:

# 定义变量
JAR_NAME="xxx.jar"

# 检查进程是否存在并杀死它
PID=$(ps -ef | grep "$JAR_NAME" | grep -v grep | awk 'NR==1{print $2}')
if [ -n "$PID" ]; then
kill -9 "$PID"
echo "正在运行,已杀死:$PID"
fi

# 启动新的 JAR 包
nohup java -jar "$JAR_NAME" --spring.profiles.active=prod -Xms512m -Xmx1024m 2>&1 &

前端部署

主要是执行npm install和build,然后删除原来的页面位置,再将构建结果拷贝过去,需要自己配置nginx代理

cd codegenie-frontend
npm install
npm run build
rm -rf /opt/1panel/apps/openresty/openresty/www/sites/codegenie.yunfei.plus/index
mv dist /opt/1panel/apps/openresty/openresty/www/sites/codegenie.yunfei.plus/index

image-20240730093905927

Pipeline流水线

基本使用

pipeline {
agent any

stages {
stage('拉取代码') {
steps {
echo '拉取成功'
}
}
stage('构建代码') {
steps {
echo '构建成功'
}
}
}
}

问题:

image-20240730094732552

需要去批准:

image-20240730094821021

安装插件

Blue Ocean

片段生成

image-20240730095359131

填入git信息和账号密码,然后生成流水线脚本

image-20240730095629226

构建一个几个项目的流水线项目:

pipeline {
agent any

tools {
maven "maven3.6.3"
}

stages {
stage('拉取parent代码') {
steps {
dir('casll-parent') {
git branch: 'dev-1.0.0', credentialsId: '55f59339-bc52-4646-bd91-df81d588153c', url: 'http://192.168.41.52:8080/cas-lelian/casll-parent.git'
}
echo '拉取parent成功'
}
}
stage('拉取common代码') {
steps {
dir('casll-common') {
git branch: 'dev-1.0.0', credentialsId: '55f59339-bc52-4646-bd91-df81d588153c', url: 'http://192.168.41.52:8080/cas-lelian/casll-common.git'
}
echo '拉取common成功'
}
}
stage('拉取api代码') {
steps {
dir('casll-api') {
git branch: 'dev-1.0.0', credentialsId: '55f59339-bc52-4646-bd91-df81d588153c', url: 'http://192.168.41.52:8080/cas-lelian/casll-api.git'
}
echo '拉取api成功'
}
}
stage('拉取gateway代码') {
steps {
dir('casll-gateway') {
git branch: 'dev-1.0.0', credentialsId: '55f59339-bc52-4646-bd91-df81d588153c', url: 'http://192.168.41.52:8080/cas-lelian/casll-gateway.git'
}
echo '拉取gateway成功'
}
}
stage('拉取auth代码') {
steps {
dir('casll-auth') {
git branch: 'dev-1.0.0', credentialsId: '55f59339-bc52-4646-bd91-df81d588153c', url: 'http://192.168.41.52:8080/cas-lelian/casll-auth.git'
}
echo '拉取auth成功'
}
}
stage('拉取baas代码') {
steps {
dir('casll-baas') {
git branch: 'dev-1.2.8-gateway', credentialsId: '55f59339-bc52-4646-bd91-df81d588153c', url: 'http://192.168.41.52:8080/cas-lelian/casll-baas.git'
}
echo '拉取baas成功'
}
}
stage('拉取docshare代码') {
steps {
dir('casll-dapp-docshare') {
git branch: 'dev-1.2.5-gateway', credentialsId: '55f59339-bc52-4646-bd91-df81d588153c', url: 'http://192.168.41.52:8080/cas-lelian/dapp-docshare.git'
}
echo '拉取docshare成功'
}
}
stage('拉取generator代码') {
steps {
dir('casll-node-generator') {
git branch: 'dev-1.2.8', credentialsId: '55f59339-bc52-4646-bd91-df81d588153c', url: 'http://192.168.41.52:8080/cas-lelian/lechain-admin.git'
}
echo '拉取generator成功'
}
}
stage('List Directory') {
steps {
sh '''
ls -al
'''
echo '查看目录成功'
}
}

stage('构建代码') {
steps {
dir('casll-parent') {
sh 'mvn clean install -pl ../casll-gateway -am'
}
echo '网关构建成功'
}
}

stage('部署gateway') {
steps {
dir('casll-gateway') {
sshPublisher(publishers: [sshPublisherDesc(configName: 'zkzn', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'cd /home/gateway/package && ls &&sh init-gateway.sh', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/home/gateway/package', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'target/casll-gateway-0.0.1.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
echo '网关部署完成'
}
}
}
}

主要思路是:

  1. 先拉取代码到文件夹中

  2. 然后去执行mvn构建,只构建部分代码,而不是所有项目

  3. 将构建好的jar发送到服务器上,并执行服务器上的脚本构建项目启动

sshPublisher不用手写,可以用jenkins自带的流水线语法可视化界面生成

一些注意事项:

  1. 在系统配置中链接远程服务器的信息,remote directory最好填/,写完了测试是不是success,在上面还可以配置私钥登录

image-20240730144704397