记录使用Jenkins制作DevOps流程

持续集成

根据实际情况,持续集成的目标是自动化编译以及打包
注意: 根据实际情况可按照当前环境进行对应的变化,只要能完成对应的目标,合理化的改变方案即可。由于 jenkins 使用界面操作较为方便,所以在表述上可能欠妥。也可以编写 jenkins 的 pipline 文件进行流水线操作

后端服务编译打包

maven
  • 安装
# 下载maven安装包,具体的文件可根据选择下载
wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz
# 解压apache-maven-3.6.1-bin.tar.gz
tar zvxf apache-maven-3.6.1-bin.tar.gz
# 开始配置环境变量,编辑文件/etc/profile
# 在最下面添加以下内容(MAVEN_HOME是刚才解压maven的路径)
export MAVEN_HOME=/opt/maven/apache-maven-3.6.1
# 查看mvn安装是否成功
mvn -v
  • 设定 maven 私有仓库(可选)
vim /opt/maven/apache-maven-3.6.1/conf/settings.xml

  <mirrors>
    <!-- * 表示让所有仓库使用该镜像-->
    <mirror>
        <id>nexus</id>
        <name>nexus</name>
        <mirrorOf>*</mirrorOf>
        <url>http://172.16.63.21:9999/repository/maven-group/</url>
    </mirror>
</mirrors>
  • 设定经过编译的 jar 包推送到私有镜像仓库(可选)
# 在编译项目中的pom.xml文件修改<distributionManagement>
<distributionManagement>
  <snapshotRepository>
      <uniqueVersion>false</uniqueVersion>
      <id>nexus</id>
      <name>nexus</name>
      <url>http://172.16.63.21:9999/repository/maven_snapshot/</url>
  </snapshotRepository>
  <repository>
      <uniqueVersion>false</uniqueVersion>
      <id>nexus</id>
      <name>nexus</name>
      <url>http://172.16.63.21:9999/repository/maven_release/</url>
  </repository>
</distributionManagement>
npm
  • 安装
# 下载安装包
wget https://nodejs.org/dist/v14.15.4/node-v14.15.4-linux-x64.tar.xz
# 解压并放入指定目录
tar -xf node-v14.15.4-linux-x64.tar.xz
mv node-v14.15.4-linux-x64 /usr/local/node
# 建立软连接
cd /usr/bin
ln -s /usr/local/node/bin/node node
ln -s /usr/local/node/bin/npm npm
  • 设定私有的镜像仓库
npm config set http://172.16.63.21:9999/repository/npm-group/
# 验证
npm config get registry
docker
  • 安装
yum -y install yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's/$releasever/7/g' /etc/yum.repos.d/docker-ce.repo  # 由于中标麒麟系统的$releasever值和Centos不同,所以需要修改
yum install -y docker-ce-20.10.9
systemctl start docker
systemctl enable docker
  • 设定私有的镜像仓库
vim /etc/docker/daemon.json
{
    "data-root": "/home/docker",    # 设定docker默认存储位置
    "registry-mirrors": ["http://172.16.63.21:6001"],   # 设定私有仓库
    "insecure-registries": ["172.16.63.21:6001","172.16.63.21:6000"]
}
git
  • 安装
yum install -y git
git --version
httpd
yum install http* -y
setenforce 0
# 可将文件放/var/www/html/下则可以实现curl获取文件
Jenkins 配置持续集成
后端
  • 持续集成
新建Item ---> 构建一个maven项目
源码管理    Git
    Repository URL: git源码的地址
    Credentials: 添加用户和密码
    Branches to build: 指定分支
构建触发器 Build when a change is pushed to GitLab. GitLab webhook
    使用Secret token注册在gitlab上实现实时联动(具体方式可百度)
Build
    Root POM: pom.xml
    Goals and options: clean package -U -Dmaven.test.skip=true
前端
  • 持续集成
新建Item ---> Freestyle Project
源码管理    Git
    Repository URL: git源码的地址
    Credentials: 添加用户和密码
    Branches to build: 指定分支
构建触发器 Build when a change is pushed to GitLab. GitLab webhook
    使用Secret token注册在gitlab上实现实时联动(具体方式可百度)
构建    Execute shell
    npm install
    rm -rf ./dist/*
    npm run build
jenkins 额外配置
  • 邮箱配置
构建后操作
Editable Email Notification(如果不存在则需要安装插件)
Project From: 邮件的发送者
Project Recipient List: 邮件接收者
Project Reply-To List: 项目回复列表
Content Type: 内容类型
Default Subject: 邮件标题
Default Content: 邮件内容
Triggers: 触发器
    Always: 总是发送邮件
注: 以上内容可以在Jenkins Configure System中设定,并且在项目中使用变量代替
关于邮件内容可根据html语法自定义
示例
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
    <style>
        th {
            background-color: antiquewhite;
        }
        .ehead {
            background-color: antiquewhite;
            text-align: center;
            border: 1px solid #F0F8FF;
        }
        .email {
            width: 400px;
            height: 330px;
            border: 2px solid black;
            margin: auto
        }
        .ebody {
            background-color: #DCDCDC;
            border: 1px solid #F0F8FF;
        }
        h4 {
            margin-left: 20px;
        }
    </style>
</head>
<body>

<div class="email">
    <div class="ehead">
        <h2>构建信息</h2>
    </div>
    <div class="ebody">

        <h4>
            项目名称: ${PROJECT_NAME}
        </h4>
        <h4>
            触发原因: ${CAUSE}
        </h4>
        <h4>
            构建结果: ${BUILD_STATUS}
        </h4>
        <h4>
            构建日志: <a
                href="http://172.16.63.21:8080/job/$PROJECT_NAME/$BUILD_NUMBER/console">点击查看构建日志</a>
        </h4>
        <h4>
            项目配置: <a
                href="http://172.16.63.21:8080/job/$PROJECT_NAME/configure">点击查看jenkins项目配置</a>
        </h4>
    </div>
    <div class="etips">
        <h5 style="text-align: center;color:#FF3E96">以上是Jenkins自动发送的邮件,请勿回复!</h5>
    </div>
</div>
</body>
</html>

  • 企业微信配置
构建后操作: 企业微信通知(如果不存在则需要安装插件)
在jenkins Configure System中<企业微信通知配置>
默认Webhook地址需要去企业微信中获取
在指定的群中创建机器人获取Webhook(可自行百度)

企业微信通知
    仅失败才@: 根据需求选定
    通知UserID: 需要@的成员(微信群中的名称)
    通知手机号码: 必须和成员的名字匹配
存储编译后文件
  • 后端
Execute shell
# 项目名
export Project=jc-earth-atmosphere
# 将编译的jar包放置到httpd服务的文件中,以提供http访问获取
cp target/*.jar /var/www/html/ci/develop/$Project
# 将编译好的jar包制作成docker镜像,并推送到镜像仓库
cp target/*.jar /var/lib/jenkins/dockerbuild/$Project/$Project.jar
cd /var/lib/jenkins/dockerbuild/$Project
# docker制作镜像
docker build -t $Project:v1 .
docker tag $Project:v1 172.16.63.21:6000/$Project:v1
docker login 172.16.63.21:6001 -u admin -p eds1234*
# docker推送镜像
docker push 172.16.63.21:6000/$Project:v1
docker rmi 172.16.63.21:6000/$Project:v1

注: 在/var/lib/jenkins/dockerbuild/$Project/目录下有对应的Dockerfile,示例如下:
FROM java:8
RUN mkdir /home/Service
RUN echo "Asia/Shanghai" > /etc/timezone
ADD jc-earth-atmosphere.jar /home/Service
ADD jc-earth-atmosphere.yml /home/Service
WORKDIR /home/Service
CMD java -Dfile.encoding=utf-8 -jar jc-earth-atmosphere.jar --spring.config.location=./jc-earth-atmosphere.yml  --spring.cloud.nacos.discovery.server-addr=$jc_nacos_ip --spring.cloud.nacos.discovery.namespace=$jc_nacos_namespace
  • 前端
Execute shell
# 项目名
export Project=jc-interface-environment
npm install
rm -rf ./dist/*
npm run build
# 将新生成的dist文件夹压缩
tar -zcvf platform.tar dist
# 将压缩包放置到httpd服务的文件中,以提供http访问获取
cp -r platform.tar /var/www/html/ci/develop/$Project/platform.tar
cp -r dist /var/lib/jenkins/dockerbuild/$Project/platform
cd /var/lib/jenkins/dockerbuild/$Project
# docker制作镜像
docker build -t $Project:v1 .
docker tag $Project:v1 172.16.63.21:6000/$Project:v1
docker login 172.16.63.21:6001 -u admin -p eds1234*
# docker推送镜像
docker push 172.16.63.21:6000/$Project:v1
docker rmi 172.16.63.21:6000/$Project:v1

注: 在/var/lib/jenkins/dockerbuild/$Project/目录下有对应的Dockerfile,示例如下:
FROM nginx:1.20.1
RUN mkdir /jiacheng/
ADD platform /jiacheng/platform
ADD env.sh /docker-entrypoint.d/env.sh
ADD nginx.conf /etc/nginx/nginx.conf
Jenkins 持续交付
后端
# 将新编译的jar部署到指定服务器上
Manage Jenkins --> Configure System --> SSH Servers
添加需要被部署的服务器
    Name: 服务器名字
    Hostname: 服务器IP地址
    Username: ssh连接的用户名
    Remote Directory: 远程的目录
    Use password authentication, or use a different key: 使用密码登录
    Passphrase / Password: ssh密码
项目中
构建后操作
Send build artifacts over SSH
    SSH Publishers
        Name: 之前设定的ssh服务器
        Transfers: 需要从jenkins传递的文件(必须是文件)
        Remove prefix: 需要删除的路径(Transfers)
        Remote directory: 传递的目的路径
        Exec command: 在服务器上需要执行的shell命令
    shell命令示例:
        #!/bin/sh
        jar_name=jc-earth-atmosphere
        app_dir=/home/Devops/deploy/$jar_name
        rm $app_dir/$jar_name.jar -f
        mv $app_dir/$jar_name*.jar $app_dir/$jar_name.jar
        docker restart $jar_name
    解析:由于在目标服务器上服务已经被docker化,并且jar包被挂载在外部,所以只需要替换jar包并且重启相关的容器则部署完毕
前端
# 将新编译的jar部署到指定服务器上
Manage Jenkins --> Configure System --> SSH Servers
添加需要被部署的服务器
    Name: 服务器名字
    Hostname: 服务器IP地址
    Username: ssh连接的用户名
    Remote Directory: 远程的目录
    Use password authentication, or use a different key: 使用密码登录
    Passphrase / Password: ssh密码
项目中
构建后操作
Send build artifacts over SSH
    SSH Publishers
        Name: 之前设定的ssh服务器
        Transfers: 需要从jenkins传递的文件(必须是文件)
        Remove prefix: 需要删除的路径(Transfers)
        Remote directory: 传递的目的路径
        Exec command: 在服务器上需要执行的shell命令
    shell命令示例:
        #!/bin/sh
        file_path=/home/webroots/environment
        echo --删除旧的platform
        rm $file_path/platform -rf
        echo --生成新的platform
        tar -xmvf $file_path/platform.tar -C $file_path
        mv $file_path/dist $file_path/platform
        rm $file_path/platform.tar -f
        echo --重启nginx
        nginx -s reload
    解析:由于在目标服务器上前端服务使用nginx代理,所以只需要将原有的对应文件夹替换,重启nginx则部署完毕
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值