EazyDevelop社区 java自动化部署_基于Jenkins+Maven+Gitea+Nexus从0到1搭建CICD环境

java自动化部署_基于Jenkins+Maven+Gitea+Nexus从0到1搭建CICD环境

本文主要介绍通过jenkins参数化构建搭建CICD(持续集成/持续交付),主要介绍jenkins参数化构建配置,jenkins本身搭建请查看官方文档。java自动化部署。在传统的单体软件架构中,软件开发、测试、运维都是以单个进程为单位。当拆分成微服务之后,单个应用可以被拆分成多个微服务,比如用户系统,可以拆分成基本信息管...

yetaoseo  ·  2022-02-09 17:55:02 发布
  1. 本文主要介绍通过jenkins参数化构建搭建CICD(持续集成/持续交付),主要介绍jenkins参数化构建配置,jenkins本身搭建请查看官方文档。java自动化部署。
  2. 在传统的单体软件架构中,软件开发、测试、运维都是以单个进程为单位。

    当拆分成微服务之后,单个应用可以被拆分成多个微服务,比如用户系统,可以拆分成基本信息管理、积分管理、订单管理、用户信息管理、合同管理等多个微服务模块。

    这个时候对每个模块分别打包、发布运行、开发、测试、运维的,对于测试、运维的工作量会极大增加。

    在这个过程中,如果缺乏自动化测试、自动化集成/部署、自动运维等能力,带来的影响是

      1. 软件交付周期增加
      2. 多环境部署的情况下,各个环境差异带来的问题。
      3. 人工运维容易给环境带来一些不可重现的影响,而且一旦发生运维错误又比较难立刻恢复,造成故障处理时间较长。并且对于运维人员的能力要求较高

        所有的这些问题,会导致软件交付时间变长、风险增加、以及运维成本增加等问题。因此,我们需要一套自动化部署体系,来构建一个CICD的模型。

        java自动化部署_基于Jenkins+Maven+Gitea+Nexus从0到1搭建CICD环境_git

        普通Jar包的运行方式

          1. 使用​​maven package​
          2. ​nohup java -jar ${APP_NAME} > goods-service.log 2>&1 &​
              • nohup用途:不挂断地运行命令
              • &用途,在后台运行
              • 2>&1: 在bash中:
              • 2>&1就是用来将标准错误2重定向到标准输出1中的。此处1前面的&就是为了让bash将1解释成标准输出而不是文件1。至于最后一个&,则是让bash在后台执行。
                • 0 代表STDIN_FILENO 标准输入(一般是键盘),
                • 1 代表STDOUT_FILENO 标准输出(一般是显示屏,准确的说是用户终端控制台),
                • 2 三代表STDERR_FILENO (标准错误(出错信息输出)。
                  • > 直接把内容生成到指定文件

                    搭建Nexus私服环境

                    Nexus是一个强大的Maven仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问。Nexus是一套“开箱即用”的系统不需要数据库,它使用文件系统加Lucene来组织数据。

                    Maven私服环境需要用​​sonatype nexus​​,下面我们从安装和配置进行详细分析

                    部署服务器: 192.168.8.138

                    下载和安装

                      1. 访问:​​https://sonatype-download.global.ssl.fastly.net/repository/downloads-prod-group/3/nexus-3.37.0-01-unix.tar.gz​​地址,下载Sonatype Nexus。
                      2. 解压缩到​​/data/program​​目录下
                        [root@localhost program]# tar -zxvf nexus-3.37.0-01-unix.tar.gz 
                        复制代码
                          1. 进入到​​${NEXUS_HOME}\bin​​目录,执行下面命令启动Nexus
                            ./nexus start 
                            复制代码

                            安装Maven

                              1. 下载Maven: ​​https://dlcdn.apache.org/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.tar.gz​
                              2. 配置Maven 和JDK 环境变量。
                                export JAVA_HOME=/data/program/jdk1.8.0_241
                                export MAVEN_HOME=/data/program/apache-maven-3.8.4
                                export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
                                export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
                                复制代码
                                  1. 进入到${NEXUS_HOME}\bin目录,执行下面命令启动Nexus
                                    用./nexus start启动,后台启动,启动成功后可以访问
                                    用./nexus run启动,前台启动,显示日志,启动后可以访问
                                    ./nexus start 
                                    复制代码

                                    启动时,会有如下提示,这个是建议我们使用非​​root​​账户来访问。

                                    WARNING: ************************************************************
                                    WARNING: Detected execution as "root" user. This is NOT recommended!
                                    WARNING: ************************************************************
                                    复制代码
                                      1. 访问:​​http://localhost:8081​​访问Nexus仓库

                                        如果想配置 nexus 的应用在本地启动的 JVM参数,可以在 ​​nexus.vmoptions​

                                        如果想改变 nexus 的 端口号,可以在 ​​nexus-default.properties​

                                        登录控制台

                                          1. 默认登录的帐号是​​admin​​,密ma在会提示你在:​​/data/program/sonatype-work/nexus3/admin.password​​文件中。

                                            java自动化部署_基于Jenkins+Maven+Gitea+Nexus从0到1搭建CICD环境_建CICD环_02

                                              1. 内容如下,直接复制该内容登录即可。
                                                090849ac-cea7-4353-b2c8-59b2bceadb50
                                                复制代码

                                                Nexus控制台说明

                                                进入Nexus控制台的​​Browse​​菜单,可以看到四种仓库类型:

                                                1)maven-central: maven中央库,默认从​​repo1.maven.org/maven2/拉取ja…​

                                                2)maven-releases: 私库发行版jar

                                                3)maven-snapshots:私库快照(调试版本)jar

                                                4)maven-public: 仓库分组,把上面三个仓库组合在一起对外提供服务,在本地maven基础配置settings.xml中使用。

                                                java自动化部署_基于Jenkins+Maven+Gitea+Nexus从0到1搭建CICD环境_java自动化部署_03

                                                Nexus默认的仓库类型有以下四种:(上面的名字可以随便取,关键是它对应的是什么仓库类型)

                                                1)group(仓库组类型):又叫组仓库,用于方便开发人员自己设定的仓库;

                                                2)hosted(宿主类型):内部项目的发布仓库(内部开发人员,发布上去存放的仓库);

                                                3)proxy(代理类型): 从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的Configuration页签下Remote Storage Location属性的值即被代理的远程仓库的路径);

                                                4)virtual(虚拟类型): 虚拟仓库(这个基本用不到,重点关注上面三个仓库的使用);

                                                Nuget是用于微软.NET开发平台的软件包管理器,和Maven类似。

                                                目录说明

                                                nexus-3.34.0-01 目录

                                                  1. bin 包含nexus的启动脚本和相关配置
                                                  2. etc jetty、karaf等配置文件
                                                  3. jre jre环境
                                                  4. lib java架包库
                                                  5. public 关于nexus应用在本地跑起来所需要的资源
                                                  6. system 应用所有的插件和组件
                                                  7. LICENSE.txt 和 NOTICE.txt 版权声明和法律细则

                                                    sonatype-work\nexus3 目录

                                                      1. blobs/ 创建blob的默认路径,当然也可以重新指定
                                                      2. cache/ 当前缓存的karaf包的信息
                                                      3. db/ OrientDB数据库的数据,用于存储nexus的元数据的数据库
                                                      4. elasticsearch/ 当前配置的Elasticsearch状态
                                                      5. etc/ 大概是运行时配置状态和关于资源库的自定义的相关的东西
                                                      6. health-check/ 看目录,健康检查的相关报告的存储目录吧
                                                      7. keystores/ 自动生成的关于资源库的ID主键
                                                      8. log/ 运行实例生成的日志文件,也有日志文件的压缩包,貌似是每天都会生成日志文件,你可以定期删除老的日志文件
                                                      9. tmp/ 用于存储临时文件的目录

                                                        Nexus设置成系统服务

                                                        按照以下步骤执行

                                                          1. 修改​​${NEXUS_HOME}\bin\nexus​​这个脚本,增加下面的配置
                                                            INSTALL4J_JAVA_HOME_OVERRIDE=/data/program/jdk1.8.0_241
                                                            复制代码
                                                              1. 设置软链接
                                                                [root@localhost bin]# ln -s /data/program/nexus-3.37.0-01/bin/nexus /etc/init.d/nexus
                                                                复制代码
                                                                  1. 通过chkconfig方式配置系统服务
                                                                    cd /etc/init.d
                                                                    sudo chkconfig --add nexus #添加nexus服务
                                                                    sudo chkconfig --levels 345 nexus on #设置开启自启动
                                                                    复制代码
                                                                      1. 启动和停止服务
                                                                        sudo service nexus start #开启服务 service nexus status #查看服务状态

                                                                        搭建Gitea环境

                                                                        参考文档: ​​docs.gitea.io/zh-cn/insta…​

                                                                          1. 安装git环境: ​​yum -y install git​​。
                                                                          2. 通过下面的命令下载linux中的安装包到​​/data/program/gitea​​目录下。
                                                                            wget -O gitea https://dl.gitea.io/gitea/1.15.7/gitea-1.15.7-linux-amd64
                                                                            复制代码
                                                                              1. 执行​​chmod +x gitea​​命令,授予执行权限
                                                                              2. 执行下面这个命令运行gitea
                                                                                ./gitea web
                                                                                复制代码

                                                                                安装成系统服务(重要)

                                                                                  1. 创建Git用户
                                                                                    sudo useradd \
                                                                                    --system \
                                                                                    --shell /bin/bash \
                                                                                    --comment 'Git Version Control' \
                                                                                    --create-home \
                                                                                    --home /home/git \
                                                                                    git
                                                                                    复制代码
                                                                                      1. 下载二进制文件
                                                                                        wget -O gitea https://dl.gitea.io/gitea/1.15.7/gitea-1.15.7-linux-amd64
                                                                                        复制代码
                                                                                          1. 根据gitea官方推荐,按照以下方式配置gitea的安装目录
                                                                                            • 把下载的文件移动到/usr/local/bin目录sudo mv /data/program/gitea /usr/local/bin 复制代码
                                                                                            • 使二进制文件可执行:chmod +x /usr/local/bin/gitea 复制代码
                                                                                            • 按照一下命令创建必要目录并设置权限sudo mkdir -p /var/lib/gitea/{custom,data,indexers,public,log} sudo mkdir -p /var/lib/gitea/{custom,data,indexers,public,log} sudo chown git: /var/lib/gitea/{data,indexers,custom,public,log} sudo chmod 750 /var/lib/gitea/{data,indexers,log} sudo mkdir /etc/gitea sudo chown root:git /etc/gitea sudo chmod 770 /etc/gitea 复制代码
                                                                                            • 根据Gitea官方提供的Systemd Unit文件,配置系统服务。sudo wget https://raw.githubusercontent.com/go-gitea/gitea/master/contrib/systemd/gitea.service -P /etc/systemd/system/ 复制代码
                                                                                            • 注意,gitea.service, 不能通过wget下载,需要去github上复制

                                                                                          • 完成上述过程后,通过下面命令开启自动启动systemctl enable gitea systemctl start gitea 复制代码
                                                                                            1. 安装启动完成后,访问:http://192.168.8.136:3000,配置数据库相关属性即可。

                                                                                              搭建Jenkins环境

                                                                                              Jenkins是一个用JAVA编写的开源的持续集成工具,运行在servlet容器中,支持软件配置管理(SCM)工具,可以执行基于APACHE ANT和APACHE MAVEN的项目,以及任意Shell脚本和Windows批处理命令

                                                                                              Jenkins提供了自动构建和部署的功能,具体安装方式如下:

                                                                                              wget -O /etc/yum.repos.d/jenkins.repo \
                                                                                              https://pkg.jenkins.io/redhat-stable/jenkins.repo
                                                                                              rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
                                                                                              yum upgrade
                                                                                              yum install epel-release java-11-openjdk-devel
                                                                                              yum install jenkins
                                                                                              systemctl daemon-reload
                                                                                              复制代码

                                                                                              通过下面的命令启动或停止jenkins

                                                                                              systemctl start jenkins
                                                                                              systemctl stop jenkins
                                                                                              复制代码

                                                                                              访问: ​​http://192.168.8.136:8080​​ 访问jenkins

                                                                                              按照控制台提示的步骤一步步执行即可。

                                                                                              java自动化部署_基于Jenkins+Maven+Gitea+Nexus从0到1搭建CICD环境_maven_04

                                                                                              注意: Jenkins安装默认采用JENKINS用户,所以如果是使用root权限,则需要修改帐号

                                                                                              [root@localhost bin]# vim /etc/sysconfig/jenkins

                                                                                              JENKINS_USER="root"
                                                                                              复制代码

                                                                                              项目改造

                                                                                              项目配置本地的私服

                                                                                                1. 修改setting.xml文件,增加mirror配置<mirrors> <mirror> <id>nexus</id> <mirrorOf>maven-public</mirrorOf> <url>http://192.168.8.136:8081/repository/maven-public/</url> </mirror> </mirrors> 复制代码
                                                                                                2. mirror相当于一个拦截器,它会拦截maven对remote repository的相关请求,走该镜像进行jar包的获取。

                                                                                                3. 在项目中增加如下配置,也就是指定snapshots和releases 不同发行版本jar包的发布仓库<distributionManagement> <snapshotRepository> <id>snapshots</id> <name>Nexus Snapshot Repository</name> <url>http://192.168.8.136:8081/repository/maven-snapshots/</url> </snapshotRepository> <repository> <id>releases</id> <name>Nexus Release Repository</name> <url>http://192.168.8.136:8081/repository/huhy-nexus/</url> </repository> </distributionManagement> 复制代码

                                                                                                  修改发布服务器的settings.xml文件

                                                                                                  修改发布服务器的settings.xml文件的目的,是因为Jenkins服务器在进行持续集成时,需要通过maven实现依赖jar包的下载,而这个下载需要从我们本地的私服中获取。

                                                                                                  <mirrors>
                                                                                                  <mirror>
                                                                                                  <id>nexus</id>
                                                                                                  <mirrorOf>maven-public</mirrorOf>
                                                                                                  <url>http://192.168.8.136:8081/repository/maven-public/</url>
                                                                                                  </mirror>
                                                                                                  </mirrors>
                                                                                                  复制代码
                                                                                                  <profiles>
                                                                                                  <profile>
                                                                                                  <id>nexusRep</id>
                                                                                                  <repositories>
                                                                                                  <repository>
                                                                                                  <id>nexus</id>
                                                                                                  <url>http://192.168.8.136:8181/repository/maven-public/</url>
                                                                                                  <layout>default</layout>
                                                                                                  <releases>
                                                                                                  <enabled>true</enabled>
                                                                                                  <updatePolicy>always</updatePolicy>
                                                                                                  </releases>
                                                                                                  </repository>
                                                                                                  </repositories>
                                                                                                  <pluginRepositories>
                                                                                                  <pluginRepository>
                                                                                                  <!--插件地址-->
                                                                                                  <id>nexus</id>
                                                                                                  <url>http://192.168.8.136:8181/repository/maven-public/</url>
                                                                                                  <snapshots>
                                                                                                  <enabled>true</enabled>
                                                                                                  </snapshots>
                                                                                                  <releases>
                                                                                                  <enabled>true</enabled>
                                                                                                  </releases>
                                                                                                  </pluginRepository>
                                                                                                  </pluginRepositories>
                                                                                                  </profile>
                                                                                                  </profiles>

                                                                                                  <activeProfiles>
                                                                                                  <activeProfile>nexusRep</activeProfile>
                                                                                                  </activeProfiles>
                                                                                                  复制代码

                                                                                                  配置自动集成与发布

                                                                                                  配置Jenkins的环境变量

                                                                                                  进入到如下页面,红色标注的配置。

                                                                                                  java自动化部署_基于Jenkins+Maven+Gitea+Nexus从0到1搭建CICD环境_jar_05

                                                                                                  配置Maven的环境,指定发布服务器上安装的Maven目录。

                                                                                                  java自动化部署_基于Jenkins+Maven+Gitea+Nexus从0到1搭建CICD环境_java自动化部署_06

                                                                                                  安装Jenkins插件

                                                                                                    • Gitea , 集成Gitea,安装好之后,在Jenkins全局配置中,添加Gitea Server信息。java自动化部署_基于Jenkins+Maven+Gitea+Nexus从0到1搭建CICD环境_maven_07
                                                                                                    • Git Parameter , 配置Git发布属性
                                                                                                    • Publish Over SSH ,在远程机器上执行脚本,这一步需要先配置能ssh远程机器
                                                                                                    • Maven Integration, 支持Maven项目的集成

                                                                                                      配置发布目标服务器信息

                                                                                                      我们把下面两台服务器当成是web节点

                                                                                                        1. 192.168.8.134
                                                                                                        2. 192.168.8.135

                                                                                                          在Jenkins 全局配置中,配置这两台服务器的信息,用来后续实现jar包远程传输。其中​​Remote Directory​​目标服务器的工作目录,jar包会被远程传输到该目录下

                                                                                                          java自动化部署_基于Jenkins+Maven+Gitea+Nexus从0到1搭建CICD环境_maven_08

                                                                                                          添加项目发布机制

                                                                                                          创建一个Maven项目的任务。

                                                                                                          java自动化部署_基于Jenkins+Maven+Gitea+Nexus从0到1搭建CICD环境_java自动化部署_09

                                                                                                          配置源码来源,这里使用Gitea中项目的源码地址,并配置登录帐号密ma信息。

                                                                                                          java自动化部署_基于Jenkins+Maven+Gitea+Nexus从0到1搭建CICD环境_git_10

                                                                                                          配置Maven的执行命令,其中​​root POM​​,如果是在多模块项目中,需要指定当前要构建的模块的pom.xml。

                                                                                                          java自动化部署_基于Jenkins+Maven+Gitea+Nexus从0到1搭建CICD环境_maven_11

                                                                                                          增加构建成功之后的执行逻辑,就是把jar包发布到远程目标服务器,然后执行相关shell脚本启动服务

                                                                                                          编写发布脚本

                                                                                                          编写shell脚本,当jar包发送到目标服务器之后,执行下面脚本。

                                                                                                            1. 做历史jar备份和清理
                                                                                                            2. 执行shell脚本启动服务
                                                                                                              #! bin/sh -e
                                                                                                              export JAVA_HOME=/data/program/jdk1.8.0_241
                                                                                                              export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
                                                                                                              export PATH=${PATH}:$JAVA_HOME/bin
                                                                                                              source /etc/profile

                                                                                                              # define property
                                                                                                              JAR_PATH='/app/service/goods-service'
                                                                                                              TEMP_PATH='/app/service/temp'
                                                                                                              BACKUP_PATH='/app/service/backup'
                                                                                                              JAR_NAME=goods-service.jar
                                                                                                              FILE_NAME=goods-service

                                                                                                              # stop target service
                                                                                                              cd ${JAR_PATH}
                                                                                                              sh run-goods-service.sh stop
                                                                                                              sleep 2
                                                                                                              rm -rf $FILE_NAME.log

                                                                                                              # backup old jar
                                                                                                              BACKUP_DATE=$(date +%Y%m%d_%H%M)

                                                                                                              if [ ! -d $JAR_PATH/backup/$FILE_NAME ];then
                                                                                                              mkdir -p $JAR_PATH/backup/$FILE_NAME
                                                                                                              fi

                                                                                                              cd ${JAR_PATH}
                                                                                                              pwd
                                                                                                              if [ -f $JAR_NAME ];then
                                                                                                              mv -f ./$JAR_NAME ./backup/$FILE_NAME/$JAR_NAME$BACKUP_DATE
                                                                                                              sleep 1
                                                                                                              fi

                                                                                                              # start jar
                                                                                                              BUILD_ID=dontKillMe
                                                                                                              cd ${TEMP_PATH}
                                                                                                              mv -f $JAR_NAME $JAR_PATH
                                                                                                              cd ${JAR_PATH}
                                                                                                              sh run-goods-service.sh restart

                                                                                                              # clear old backup
                                                                                                              cd ${JAR_PATH}/backup/$FILE_NAME
                                                                                                              ls -lt|awk 'NR>5{print $NF}' |xargs rm -rf

                                                                                                              ps -ef|grep java
                                                                                                              echo "=============deploy success========"
                                                                                                              复制代码

                                                                                                              编写运行脚本run-goods-service.sh

                                                                                                              # 表示当前脚本采用/bin路径的bash程序来解释执行
                                                                                                              #!/bin/bash

                                                                                                              # 执行的jar包
                                                                                                              APP_NAME=goods-service.jar

                                                                                                              usage() {
                                                                                                              echo "执行操作命令 [start|stop|restart|status]"
                                                                                                              exit 1
                                                                                                              }

                                                                                                              if_exist() {
                                                                                                              pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'`
                                                                                                              if [ -z "${pid}" ]; then
                                                                                                              return 1
                                                                                                              else
                                                                                                              return 0
                                                                                                              fi
                                                                                                              }

                                                                                                              start() {
                                                                                                              if_exist
                                                                                                              if [ $? -eq 0 ]; then
                                                                                                              echo "${APP_NAME} already running . pid=${pid}"
                                                                                                              else
                                                                                                              nohup java -jar ${APP_NAME} > goods-service.log 2>&1 &
                                                                                                              npid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}'`
                                                                                                              echo "start ${APP_NAME} success, pid=${npid}"
                                                                                                              fi
                                                                                                              }

                                                                                                              stop() {
                                                                                                              if_exist
                                                                                                              if [ $? -eq 0 ]; then
                                                                                                              kill -9 $pid
                                                                                                              echo "stop $pid success".
                                                                                                              else
                                                                                                              echo "${APP_NAME} is not running"
                                                                                                              fi
                                                                                                              }

                                                                                                              status() {
                                                                                                              if_exist
                                                                                                              if [ $? -eq 0 ]; then
                                                                                                              echo "${APP_NAME} is running. pid is ${pid}"
                                                                                                              else
                                                                                                              echo "${APP_NAME} is not running "
                                                                                                              fi
                                                                                                              }

                                                                                                              restart() {
                                                                                                              stop
                                                                                                              sleep 5
                                                                                                              start
                                                                                                              }

                                                                                                              case "$1" in
                                                                                                              "start")
                                                                                                              start
                                                                                                              ;;
                                                                                                              "stop")
                                                                                                              stop
                                                                                                              ;;
                                                                                                              "status")
                                                                                                              status
                                                                                                              ;;
                                                                                                              "restart")
                                                                                                              restart
                                                                                                              ;;
                                                                                                              *)
                                                                                                              usage
                                                                                                              ;;
                                                                                                              esac

                                                                                                              复制代码

                                                                                                              配置代码提交后动态构建

                                                                                                              如果我们希望代码提交合并到某个分支后,自动构建进行发布,怎么实现呢?

                                                                                                              安装Webhook插件

                                                                                                                1. 在Jenkins中安装​​Generic Webhook Trigger​​件,安装成功后,会在构建的配置页面多了下面所示的一个选项
                                                                                                                  1. java自动化部署_基于Jenkins+Maven+Gitea+Nexus从0到1搭建CICD环境_建CICD环_12
                                                                                                                  2. 配置​​Generiac Webhook Trigger​​,增加一个token作为验证。java自动化部署_基于Jenkins+Maven+Gitea+Nexus从0到1搭建CICD环境_git_13
                                                                                                                  3. 注意这个地址: http://JENKINS_URL/generic-webhook-trigger/invoke , 在webhook中需要配置这个作为触发调用。

                                                                                                                  gitea添加webhook钩子

                                                                                                                    1. 在gitea的项目中,找到​​Web钩子​​,添加​​Web钩子​​. 选择​​gitea​​。java自动化部署_基于Jenkins+Maven+Gitea+Nexus从0到1搭建CICD环境_建CICD环_14
                                                                                                                    2. 添加webhookjava自动化部署_基于Jenkins+Maven+Gitea+Nexus从0到1搭建CICD环境_jar_15

                                                                                                                      验证自动触发的行为

                                                                                                                        1. 修改gpmall-pc这个项目的任何一个代码,然后提交到gitea上。
                                                                                                                        2. 观察Jenkin的项目构建目录,会增加一个自动构建的任务,如下图所示。java自动化部署_基于Jenkins+Maven+Gitea+Nexus从0到1搭建CICD环境_建CICD环_16
                                                                                                                        3. 并且在gitea的webhook中,可以看到最近的推送记录java自动化部署_基于Jenkins+Maven+Gitea+Nexus从0到1搭建CICD环境_git_17

                                                                                                                          源码地址

                                                                                                                          文章演示使用的源码: ​​github.com/2227324689/…​

                                                                                                                          Logo

                                                                                                                          一站式 AI 云服务平台

                                                                                                                          更多推荐

                                                                                                                          • 浏览量 552
                                                                                                                          • 收藏 0
                                                                                                                          • 0

                                                                                                                          所有评论(0)

                                                                                                                          查看更多评论 
                                                                                                                          已为社区贡献14条内容