小哥之哥 小哥之哥
首页
    • Prometheus
    • Kubertenes
    • Docker
    • MySQL
  • Go
  • Python
  • Vue
  • Jenkins
  • ELK
  • LDAP
  • 随笔
  • 最佳实践
  • 博客搭建
  • 问题杂谈
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

小哥之哥

运维扫地僧
首页
    • Prometheus
    • Kubertenes
    • Docker
    • MySQL
  • Go
  • Python
  • Vue
  • Jenkins
  • ELK
  • LDAP
  • 随笔
  • 最佳实践
  • 博客搭建
  • 问题杂谈
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • LDAP

  • Jenkins

    • Jenkins之Docker部署
    • Jenkins之自动化项目发布
      • Jenkins之使用ansible发布项目
      • Jenkins之pipline初识
      • Jenkins之pipline语法
      • Jenkins之钉钉通知
      • Jenkins最佳实践之为job添加构建预览信息
      • Jenkins最佳实践之webhook
    • 技术专题
    • Jenkins
    tchua
    2023-05-18
    目录

    Jenkins之自动化项目发布

    # 一、前言


    其实对于CI/CD,无论你发布的是那种语言开发的程序,大体流程都差不多,只是不同语言构建工具不一样,启动方式不一样,本文会针对一些常用的语言进行CI/CD发布配置举例。

    注意

    本文只是我个人的配置方式,其实不同的公司不同的架构体系,发布方式都会有差别,需要自己根据理解修改符合自己公司体系的发布,俗话说适合自己的才是最好的。

    # 二、Java项目

    # 2.1 job创建

    jenkins首页,点击左上新建item,出现下图,填写对应信息,然后点击确定

    image-20230518112915330

    说明

    这里可以看到有Freestyle project和构建一个maven项目选择,如果你是java项目那么两种都还ok,如果是其他项目则只能选择第一个,这里为了方便自定义打包,也直接选择Freestyle project模式。

    # 2.2 参数配置

    参数配置这里只是针对核心的选择进行介绍,其他可自行选择

    • 源码配置

    属于仓库地址

    image-20230518114148308

    这里是添加仓库地址的账号密码

    image-20230518114112708

    说明

    ​ Repository URL:项目地址

    Credentials:配置用户,该用户 需要对上面的项目有访问权限

    # 2.3 Build Steps配置

    这里添加执行shell命令

    image-20230518114658188

    # 2.4 发布脚本

    由于使用的是Freestyle project风格,所以CI/CD的操作都需要在该脚本中定义

    image-20230518152838399

    # ## Jenkins 侧配置
    # 变量配置
    JAR_PATH="${WORKSPACE}/sp-erp/target"
    JAR_PATH="sp-erp-1.0-SNAPSHOT.jar"
    APP_PATH="/data/apps/sp-erp"
    # CI 打包
    mvn clean install -DskipTests
    
    # CD 部署
    cp -r $JAR_PATH/${JAR_PATH} $APP_PATH
    cd $APP_PATH
    sh run.sh
    
    # ## run.sh 脚本
    #/bin/bash
    APP_PATH="/data/apps"
    APP_PRO="sp-erp"
    APP_NAMR="sp-erp-1.0-SNAPSHOT.jar"
    BUILD_ID=dontKillMe
    
    PID=$(ps -ef|grep -v grep |grep "${APP_NAMR}"|awk -F" " '{ print $2 }')
    
    if [ -n ${PID} ]
    then
    	echo “正在kill进程${APP_PRO}:${PID}”
    	kill -9 ${PID}
    	sleep 2s
    fi
    
    nohup java -jar ${APP_PATH}/${APP_PRO}/${APP_NAMR} --spring.profiles.active=dev >/dev/null 2>&1 &
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31

    注意

    • 此脚本只是用作测试环境,勿用于生产环境.
    • 这里只是针对于Jenkins与应用均在同一台机器的部署情况,如果需要远程发布,则需要借助scp命令进行远程传输,或者使用ansible(推荐)进行管理。

    # 三、Node项目


    node项目相对于java应用相对来说简单一些,因为大部分我们都是构建成静态文件放到Nginx下运行,当然对应构建我们需要配置node环境

    # 2.1 Node配置
    • 插件安装

    image-20230518154515549

    • 环境配置

    在全局工具新增Node,分别指定node别名和node版本,这里我们可以安装多个版本node,这样在job里面可以根据实际项目需要选择

    image-20230518155012679

    image-20230518155123350

    # 2.2 Job创建

    这里直接创建一个名为node-demo的job

    image-20230518154255687

    # 2.3 参数配置

    源码管理,直接输入对应的仓库地址;构建环境处,我们需要选择下刚刚配置的node版本

    • 源码配置

    image-20230518162053263

    • node版本

    image-20230518162256412

    • 构建命令

    image-20230518162556411

    PATH_DIR="/opt/apps/qisheng-erp"
    npm install --registry=https://registry.npm.taobao.org -unsafe-perm=true
    npm run build
    
    rm -rf ${PATH_DIR}/
    cp -r ${WORKSPACE}/dist/* ${PATH_DIR}/
    
    1
    2
    3
    4
    5
    6

    # 四、Docker部署Java


    # 4.1 前言

    目标主机以拉取的最新镜像启动新的服务

    Docker部署java项目的话,其实跟发布java应用配置基本一致,这里只是多了Docker镜像构建的步骤

    • jenkins主机构建应用为jar包
    • jenkins主机把生产的jar包构建为docekr镜像
    • jenkins主机把构建好的镜像推送至镜像仓库
    • 目标主机去镜像仓库拉取镜像,并启动服务
    # 4.2 创建job

    跟上面都一样,这里创建一个docker-demo的job

    image-20230518165155454

    # 4.3 项目配置
    • 指定源码

    image-20230518165324128

    • 构建配置

    image-20230518170824352

    Jenkins 脚本

    # 变量配置
    JAR_PATH="${WORKSPACE}/sp-erp/target"
    JAR_NAME="sp-erp-1.0-SNAPSHOT.jar"
    APP_PATH="/data/apps/sp-erp"
    DOCKER_HUB="registry-vpc.cn-hangzhou.aliyuncs.com/qpos"    ## 镜像仓库地址
    IMAGE_NAME="sp-erp"
    # CI 打包
    mvn clean install -DskipTests
    # build image
    # ## Dockerfile
    cat >Dockerfile << EOF
    FROM registry-vpc.cn-hangzhou.aliyuncs.com/public/java:1.8
    MAINTAINER tchua
    ADD ${JAR_PATH}/${JAR_NAME} /apps/
    EXPOSE 8076
    ENTRYPOINT ["java","-jar","/apps/${JAR_NAME}"]
    EOF
    # ## build
    # --username 阿里云镜像仓库用户 --password 阿里云镜像仓库密码
    docker login --username=docker@registry-vpc.cn-hangzhou.aliyuncs.com --password=${password}
    docker build -t $DOCKER_HUB/${IMAGE_NAME}:dev .
    docker push $DOCKER_HUB/${IMAGE_NAME}:dev
    # ## CD
    cd ${APP_PATH}
    sh run.sh
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25

    run.sh脚本

    #!/bin/bash
    
    DOCKER_HUB="registry-vpc.cn-hangzhou.aliyuncs.com/qpos"  ## 镜像仓库地址
    IMAGE_NAME="sp-erp"
    DOCKER_NAME="sp-erp"
    TAG="dev"
    PORT="9091"
    #rm
    docker rm -f $DOCKER_NAME 
    docker rmi ${DOCKER_HUB}:${IMAGE_NAME}:${TAG} 
    
    #login
    ## 登陆镜像仓库,${USER} ${PASSWD}修改为自己具体的用户名密码
    docker login -u ${USER} -p ${PASSWD} ${docker_hub} 
    
    docker pull ${DOCKER_HUB}:${IMAGE_NAME}:${TAG} 
    
    ## 启动指定镜像服务
    docker run --name ${DOCKER_NAME} -p ${PORT}:${PORT} -d ${DOCKER_HUB}:${IMAGE_NAME}:${TAG}
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

    注意

    需要特别说明的是,这里Jenkins主机与应用主机属于同一台机器,因此我这边并没有涉及到远程的操作,生产中建议直接使用ansible进行批量部署,关于Jenkins通过ansible部署,看后面文章会介绍

    编辑 (opens new window)
    上次更新: 2023/06/29, 18:27:26
    Jenkins之Docker部署
    Jenkins之使用ansible发布项目

    ← Jenkins之Docker部署 Jenkins之使用ansible发布项目→

    最近更新
    01
    cert-manager自动签发Lets Encrypt
    09-05
    02
    Docker构建多架构镜像
    08-02
    03
    Prometheus数据迁移至VMstorage
    08-01
    更多文章>
    Theme by Vdoing | Copyright © 2023-2024 |豫ICP备2021026650号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式