jenkins安装运行springboot项目

210 阅读2分钟

一、java安装

1.1 java环境配置

1.1.1 解压jdk

tar -zxvf -C 压缩包 /usr/local/java

1.1.2 更改配置文件

vim /etc/profile 
# 将以下内容配置到/etc/profile文件中,
export JAVA_HOME=/usr/local/java 
export JRE_HOME=${JAVA_HOME}/jre 
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH 
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin 
export PATH=$PATH:${JAVA_PATH} 
# 生成
source /etc/profile 

1.1.3 设置软连接加入到命令中

ln -s /usr/local/java/bin/java /usr/bin/java

二、jenkins安装

2.1 使用yum安装

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo 
sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key 
yum install jenkins

2.2 jenkins配置

2.2.1 jenkins的java环境配置

image.png

vim /etc/init.d/jenkins
添加 1.1.3 设置的软连接到环境中
/usr/bin/java

2.2.2 jenkins启动端口配置

vim /etc/sysconfig/jenkins
# 设置启动端口(我设置的14444)
JENKINS_PORT="14444"
# 设置用户
JENKINS_USER="root"

2.2.3 替换下载源

编辑/var/lib/jenkins/updates/default.json,
updates.jenkins-ci.org/download 替换为 mirrors.tuna.tsinghua.edu.cn/jenkins,
www.google.com 编辑替换为 www.baidu.com

三、Docker安装

3.1 Docker安装

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

3.2 Docker镜像源配置

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://6pf7s4.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

3.3 项目中编写Dockerfile文件

# 基于maven镜像
FROM maven:3.8.4-jdk-11 AS builder
# 设置作者
LABEL MAINTAINER="gaoyu"
# 声明环境
ARG arg
# 设置工作区目录
WORKDIR /build/
# 将代码复制到工作区下
COPY . /build/
# 设置maven镜像的settings.xml (可选择,可设置自己的私服地址)
COPY settings-docker.xml /usr/share/maven/conf/settings.xml
# 执行maven打包命令(本人设置的maven中profile为dev)
RUN  mvn clean package -Dmaven.test.skip=true -P dev -U
# 基于jdk镜像
FROM openjdk:11-jdk
# 设置工作区目录
WORKDIR /work
# 将基于maven打包的镜像中的文件复制到/work目录下
COPY --from=builder /build/gateway/target/gateway-1.0-SNAPSHOT.jar /work/information-gateway.jar
# 暴漏端口
EXPOSE 20000
# 执行命令
ENTRYPOINT ["java","-Xms1024m","-Xmx2048m","-jar","/work/information-gateway.jar"]

四、项目下的根目录下编写shell脚本(build.sh)

version=$1
param=$2
env=$3
if [[ -z $version ]]; then
  echo -e "no version"
  exit 1
fi
root_path=$(pwd)
all_dockerfile_path=$(find $root_path -name Dockerfile)
# create instance id
uuid=$(head -c 8 /dev/urandom | od -A n -t x | tr -d ' ')

function removeDocker() {
  image_prefix=$1
  for item in $(docker ps -aq --filter name="$image_prefix"-ins*:*); do
    echo "The id of the container to delete is $item"
    docker stop "$item"
    docker rm "$item"
  done
  for item in $(docker images -q --filter reference="$image_prefix"*:*); do
    echo "The id of the image to delete is $item"
    docker rmi "$item"
  done
}

function moduleHandle() {
  module_name=$1
  ip_suffix=$2
  for module_path in ${all_dockerfile_path[*]}; do
    dockerfile_path=${module_path##*$root_path/}
    if [ -n "$dockerfile_path" ]; then
      if [[ $dockerfile_path == *$module_name* ]]; then
        removeDocker $module_name
        docker build -f $dockerfile_path -t $module_name-"$version" --build-arg arg=$env .
        docker run --name $module_name-ins-"$uuid" -d --network=information --ip 172.16.0.$ip_suffix $module_name-"$version"
      fi
    fi
  done
}

function removeNoneImages() {
  for item in $(docker images -f "dangling=true" -q); do
    echo "The id of the image to delete is $item"
    for ins in $(docker ps -aq --filter ancestor=$item); do
      echo "docker of container-ins is $ins"
      docker stop "$ins"
      docker rm "$ins"
    done
    docker rmi "$item"
  done
}

modules=('user_center' 'auth' 'gateway')
removeNoneImages
for i in $(seq 0 ${#modules[@]}); do
  name=${modules[$i]}
  if [[ $param == "all" ]]; then
    moduleHandle $name 4$i
  else
    if [[ $param == $name ]]; then
      moduleHandle $name 4$i
    fi
  fi
done

五、 jenkins项目配置

image.png

sh build.sh 1.0 all dev