Jenkins自动化部署环境搭建

Docker安装并启动Jenkins

docker run \
  --name jenkins \
  -u root \
  -d \
  -p 80:8080 \
  -p 50000:50000 \
  -v jenkins-data:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  --restart always \
  jenkins/jenkins

访问Jenkins

image-20220906043941645

按步骤做初始化操作

初始密码挂载路径

/var/lib/docker/volumes/jenkins-data/_data/secrets/initialAdminPassword

安装插件

第一次访问Jenkins时,选择安装推荐使用的插件

再安装以下插件

  • Maven Intergration(用于构建Maven项目)
  • Publish Over SSH
  • NodeJS(用于构建Vue项目)

Jenkins插件更新网络问题解决

系统管理 -> 插件管理 -> 高级 -> 升级站点

image-20220922144502398

修改为http://mirror.esuni.jp/jenkins/updates/update-center.json

Jenkins全局工具配置

系统管理 -> 全局工具配置

配置JDK

image-20220922145234040

/opt/java/openjdk

配置Git

image-20220922145301538

/usr/bin/git

安装Maven

image-20220922145332866

安装NodeJS

image-20220922145357538

SSH远程应用服务器配置

系统管理 -> 系统配置

image-20220922145659934

构建并部署Maven项目

image-20220922150333333

配置源码管理

image-20220922150434886

配置构建前操作

清理之前构建的数据

image-20220922150604767

rm -rf /opt/languageTrainer
mkdir -p /opt/languageTrainer

配置构建

image-20220922150644290

配置构建后操作

传输应用jar文件,并修改文件名

image-20220922150741317

mv /opt/languageTrainer/*.jar /opt/languageTrainer/LanguageTrainer.jar

传输DockerFile

image-20220922150819747

传输shell脚本

image-20220922150913339

chmod +x /opt/languageTrainer/*.sh
/opt/languageTrainer/clean.sh
/opt/languageTrainer/run.sh

clean.sh

#!/bin/bash
sudo echo "-----Cleaning the container of Language Trainer begins.-----"
containerId=$(sudo docker ps | grep -w language-trainer | head -1 | awk '{print $1}')
if [ "$containerId" ]; then
  sudo echo "The container of Language Trainer exists, and it is running now."
  sudo echo "Stop the container. Container Id:$containerId"
  sudo docker update --restart=no "$containerId"
  sudo docker stop "$containerId"
  sudo echo "Remove the container. Container Id:$containerId"
  sudo docker rm "$containerId"
else
  containerId=$(sudo docker ps -a | grep -w language-trainer | head -1 | awk '{print $1}')
  if [ "$containerId" ]; then
    sudo echo "The container of Language Trainer exists, but it is not running now."
    sudo echo "Remove the container. Container Id:$containerId"
    sudo docker rm "$containerId"
  else
    sudo echo "The container of Language Trainer doesn't exists."
  fi
fi
sudo echo "-----Cleaning the container of Language Trainer ends.-----"

sudo echo "-----Cleaning the image of Language Trainer begins.-----"
imageId=$(sudo docker images | grep -w language-trainer | head -1 | awk '{print $3}')
if [ "$imageId" ]; then
  sudo echo "The image of Language Trainer exists."
  sudo echo "Remove the image. Image Id:$imageId"
  sudo docker rmi "$imageId"
else
  sudo echo "The image of Language Trainer doesn't exists."
fi
sudo echo "-----Cleaning the image of Language Trainer ends.-----"

run.sh

#!/bin/bash
sudo docker build -f /opt/languageTrainer/Dockerfile -t "language-trainer" /opt/languageTrainer/
sudo docker run -p 8080:8080 --name "language-trainer" --restart always -d "language-trainer"

配置Jenkins最后清理工作

image-20220922150957586

构建并部署Vue项目

image-20220922151141869

配置源码管理

image-20220922151234460

配置构建环境

image-20220922151345923

配置构建

image-20220922172259053

#!/bin/bash
node -v &&
npm config set registry https://registry.npm.taobao.org &&
npm install &&
npm run build &&
tar -zcvf dist.tar.gz dist/*

配置构建后操作

传到应用服务器,部署到Nginx

image-20220922172403317

tar -zxvf /opt/language-trainer-vue/dist.tar.gz -C /opt/language-trainer-vue
rm -rf /opt/volume/nginx/html/*
mv /opt/language-trainer-vue/dist/* /opt/volume/nginx/html
rm -rf /opt/language-trainer-vue

清理工作空间

image-20220922151432722