jenkins自动部署
1. docker安装
以下命令均以root权限执行
卸载docker旧版本
java
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
安装相关工具类
java
yum install -y yum-utils device-mapper-persistent-data lvm2
配置docker仓库
java
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
aliyun源
java
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker
java
yum install docker-ce
java
Installed:
docker-ce.x86_64 0:18.03.0.ce-1.el7.centos
Dependency Installed:
audit-libs-python.x86_64 0:2.7.6-3.el7 checkpolicy.x86_64 0:2.5-4.el7 container-selinux.noarch 2:2.42-1.gitad8f0f7.el7 libcgroup.x86_64 0
libtool-ltdl.x86_64 0:2.4.2-22.el7_3 pigz.x86_64 0:2.3.3-1.el7.centos policycoreutils-python.x86_64 0:2.5-17.1.el7 python-IPy.noarch
Complete!
验证docker
启动docker
java
systemctl start docker
验证docker
java
docker run hello-world
出现以下内容则表示安装成功
java
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9bb5a5d4561a: Pull complete
Digest: sha256:f5233545e43561214ca4891fd1157e1c3c563316ed8e237750d59bde73361e77
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
设置开机自启
java
chkconfig docker on
升级docker ce
java
yum -y upgrade
卸载docker
java
yum remove docker-ce
rm -rf /var/lib/docke
配置国内镜像和存储目录
java
vim /etc/docker/daemon.json
registry-mirrors 为镜像地址
docker 版本<20 graph 为存储目录 建议不要使用默认的 否则空间会不够用
docker 版本>20 graph已经弃用 需使用 data-root
java
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"https://dockerproxy.com",
"http://hub-mirror.c.163.com"
],
"data-root": "/home/docker"
}
java
systemctl daemon-reload
systemctl restart docker
2. docker-compose安装
github安装
版本查询 地址: github地址
选择自己想要安装的版本 修改以下语句版本号
java
curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
检查版本
1.27.4
java
docker-compose -version
2.2.2
java
docker-compose version
3. linux安装JDK 17 为例
cd 进入/usr/local 创建jdK17文件夹 进入jdk17文件夹
下载jdk17
java
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
安装wget命令
java
yum -y install wget
解压jdk压缩包
java
tar -zxvf jdk-17.0.1_linux-x64_bin.tar.gz
vim/etc/profile 配置环境变量
java
export JAVA_HOME=/usr/lib/jdk17/jdk-17.0.1
export CLASSPATH=.:$JAVA_HOME/lib/
export PATH=.:$JAVA_HOME/bin:$PATH
source /etc/profile 重启环境变量
java -version 查看版本号

4. git安装
java
yum install -y git
5. 安装maven
查找版本
maven.apache.org/download.cg...
下载maven
解压maven
java
tar -zxvf apache-maven-3.8.8-bin.tar.gz
配置环境变量
java
JAVA_HOME=/root/software/jdk/jdk1.8.0_371
CLASSPATH=.:$JAVA_HOME/lib
MAVEN_HOME=/usr/local/software/maven/apache-maven-3.8.8
PATH=$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH MAVEN_HOME PATH
配置生效
java
source /etc/profile
输入mvn -version查看安装版本
6. 安装jenkins
在usr/local下创建jenkins文件夹 官方下载jenkins.war包,放入该文件夹下
安装字体等程序插件
java
sudo yum install dejavu-sans-fonts
sudo yum install fontconfig
sudo yum install xorg-x11-server-Xvfb
启动jenkins.war
java
nohup java -jar /usr/local/jenkins/jenkins.war > /usr/local/jenkins/jenkins.out &
如:/root/.jenkins/secrets/initialAdminPassword,/root/.jenkins 就是 jenkins 的工作目录,在 jenkins 的工作目录 .jenkins 中,找到 hudson.model.UpdateCenter.xml 文件打开
进入到 updates
目录下,编辑 default.json
文件,将该文件中国外的地址全部替换成国内的
https://www.google.com
全部替换成https://www.baidu.com
https://updates.jenkins.io/download
全部替换成https://mirrors.tuna.tsinghua.edu.cn/jenkins
安装jenkins插件和管理用户
命令 cat /root/.jenkins/secrets/initialAdminPassword 获取管理员密码
配置git,maven,jdk
创建项目配置项目构建环境
dockerfile 文件,镜像生成
java
#FROM findepi/graalvm:java17-native
FROM openjdk:17.0.2-oraclelinux8
MAINTAINER hykj-server
RUN mkdir -p /hykj-admin/server/logs \
/hykj-admin/server/temp \
/hykj-admin/skywalking/agent
WORKDIR /hykj-admin/server
ENV SERVER_PORT=8091 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS="-Dname=hykj-admin.jar -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
EXPOSE ${SERVER_PORT}
ADD ./target/hykj-admin.jar ./app.jar
ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \
# 应用名称 如果想区分集群节点监控 改成不同的名称即可
#-Dskywalking.agent.service_name=scountry-server \
#-javaagent:/scountry/skywalking/agent/skywalking-agent.jar \
-jar app.jar \
-XX:+HeapDumpOnOutOfMemoryError -Xlog:gc*,:time,tags,level -XX:+UseZGC ${JAVA_OPTS}
jenkins构建脚本
java
#!/bin/sh
# maven打包
mvn clean package -Dmaven.test.skip=true
echo "maven打包成功"
cd ./hykj-admin
service_name="hykj-admin"
service_port=8091
# 查看镜像id
image_id=$(docker images | grep $service_name | awk '{print $3}')
echo "镜像id为:$image_id"
if [ -n "$image_id" ]
then
echo "镜像已存在,删除镜像"
docker rmi $image_id
echo "镜像删除成功"
# 重新构建镜像
docker build -t $service_name .
echo "镜像构建成功"
else
echo "镜像不存在,开始构建镜像"
# 构建镜像
docker build -t $service_name .
echo "镜像构建成功"
fi
# 查看容器
container_id=$(docker ps -a | grep $service_name | awk '{print $1}')
if [ -n "$container_id" ]
then
echo "容器已存在,删除容器"
# 停止容器
docker stop $container_id
# 删除容器
docker rm $container_id
echo "容器删除成功"
else
echo "容器不存在,开始运行容器"
fi
# 回到文件上层目录
cd ..
# 通过docker-compose运行容器
docker-compose up -d hykj-admin-server
#docker run -d --name $service_name --net=host -p $service_port:$service_port $service_name
# 打印日志
docker logs -f $service_name
docker-compose 脚本
java
version: '3'
services:
mysql:
image: mysql:8.0.33
container_name: mysql
environment:
# 时区上海
TZ: Asia/Shanghai
# root 密码
MYSQL_ROOT_PASSWORD: jzkj@123
# 初始化数据库(后续的初始化sql会在这个库执行)
MYSQL_DATABASE: jzkj_admin
ports:
- "3306:3306"
volumes:
# 数据挂载
- /docker/mysql/data/:/var/lib/mysql/
# 配置挂载
- /docker/mysql/conf/:/etc/mysql/conf.d/
command:
# 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配)
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
privileged: true
network_mode: "host"
nginx-web:
image: nginx:1.23.4
container_name: nginx-web
environment:
# 时区上海
TZ: Asia/Shanghai
ports:
- "80:80"
- "443:443"
volumes:
# 证书映射
- /docker/nginx/cert:/etc/nginx/cert
# 配置文件映射
- /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
# 页面目录
- /docker/nginx/html:/usr/share/nginx/html
# 日志目录
- /docker/nginx/log:/var/log/nginx
privileged: true
network_mode: "host"
redis:
image: redis:6.2.12
container_name: redis
ports:
- "6379:6379"
environment:
# 时区上海
TZ: Asia/Shanghai
volumes:
# 配置文件
- /docker/redis/conf:/redis/config:rw
# 数据文件
- /docker/redis/data/:/redis/data/:rw
command: "redis-server /redis/config/redis.conf"
privileged: true
network_mode: "host"
minio:
image: minio/minio:RELEASE.2023-04-13T03-08-07Z
container_name: minio
ports:
# api 端口
- "9000:9000"
# 控制台端口
- "9001:9001"
environment:
# 时区上海
TZ: Asia/Shanghai
# 管理后台用户名
MINIO_ROOT_USER: zkjs147258
# 管理后台密码,最小8个字符
MINIO_ROOT_PASSWORD: zkjs147258+
# https需要指定域名
#MINIO_SERVER_URL: "https://xxx.com:9000"
#MINIO_BROWSER_REDIRECT_URL: "https://xxx.com:9001"
# 开启压缩 on 开启 off 关闭
MINIO_COMPRESS: "off"
# 扩展名 .pdf,.doc 为空 所有类型均压缩
MINIO_COMPRESS_EXTENSIONS: ""
# mime 类型 application/pdf 为空 所有类型均压缩
MINIO_COMPRESS_MIME_TYPES: ""
volumes:
# 映射当前目录下的data目录至容器内/data目录
- /docker/minio/data:/data
# 映射配置目录
- /docker/minio/config:/root/.minio/
command: server --address ':9000' --console-address ':9001' /data # 指定容器中的目录 /data
privileged: true
network_mode: "host"
hykj-admin-server:
image: hykj-admin
container_name: hykj-admin
environment:
# 时区上海
TZ: Asia/Shanghai
SERVER_PORT: 8091
volumes:
# 配置文件
- /docker/server1/logs/:/hykj/server/logs/
# skywalking 探针
# - /docker/skywalking/agent/:/scountry/skywalking/agent
privileged: true
network_mode: "host"
7. 节点部署添加
新建节点
java
// 节点服务器执行以下命令:
nohup java -jar agent.jar -url http://192.168.21.130:8080/ -secret 18c4f1bef7cba3c5ad4cee1d74ead35444b734a8ab6dbd125a5e5fdcda154311 -name node22 -workDir "/usr/local/jenkins" &