jenkins配置CICD自动发布代码;build后自动打tag(github发布demo)

先安装jenkins

我的jenkins版本是2.401
一般推荐直接部署jenkins到宿主机上;
我是部署到了docker中,宿主机的环境直接读取是读不到的,还需要额外的映射

运行环境ubuntu
搭建jenkins

安装jdk

安装jdk

Linux服务器安装并配置git

// 安装git
[root@localhost ~] yum install git
// 查看git的版本
[root@localhost ~]# git version
git version 1.7.1
// 配置git的用户名
[root@localhost ~]# git config --global user.name "CodeTiger"
// 配置git的邮箱
[root@localhost ~]# git config --global user.email "18252025311@163.com"
// 生成密钥文件,一路回车,默认生成在/root/.ssh文件夹下
[root@localhost ~]# ssh-keygen -t rsa -C "18252025311@163.com"

将ssh公钥证书配置到github上,保证linux服务器与github联通
在setting里
在这里插入图片描述

查看公钥的内容,然后复制进github

[root@localhost .ssh] ls
id_rsa  id_rsa.pub
[root@localhost .ssh] vi id_rsa.pub 

在这里插入图片描述

保存即可。验证配置是否成功

[root@localhost .ssh] ssh git@github.com
The authenticity of host 'github.com (13.250.177.223)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,13.250.177.223' (RSA) to the list of known hosts.
PTY allocation request failed on channel 0
Hi stronglxp! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
[root@localhost .ssh]# 

安装maven

安装maven

添加子节点

业务上打包的服务一多,一台jenkins服务可能顶不住,这个时候添加一个jenkins子节点分担下build任务会好很多;当前所有的配置都还是在当前的jenkins上的;

添加linux服务器的节点,工作目录可以选择当前jenkins的数据存放目录;
如果是使用的ssh密钥连接仓库这里配置里的凭据可以不填;
如果是使用账号密码连接仓库凭据是需要写的。
仓库配置这里的凭据是连接git仓库的

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在节点列表可以看到已经添加成功,点击名称,测试是否能进行连接。

在这里插入图片描述

在这里插入图片描述

新建任务

build之前需要限制一个运行节点,不配置的话默认就是当前jenkins所在的节点;
如果有多个节点但是不配置,默认是随机抽取一个节点.

如果想用本机部署,并且是本机是docker部署的,要注意先关的jdkmaven环境读取;
比如我当前就是docker部署的jenkins的,打包的时候需要用到mavenjdk

  1. mavenjdk通过volume挂载到容器内,实现共享配置
  2. 然后配置容器的jdkmaven环境变量

附上一份我的配置

version: '3.1'
services:
  jenkins:
    image: jenkins/jenkins:2.401.1-lts-jdk11
    container_name: jenkins_2_401
    deploy:
      resources:
        limits:
          memory: 1024m
    volumes:
      - /data/jenkins/:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker
      - /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7

      - /home/felix/app/jdk/jdk-17.0.2:/home/felix/app/jdk/jdk-17.0.2
      - /home/felix/app/maven/apache-maven-3.8.8:/home/felix/app/maven/apache-maven-3.8.8

    ports:
      - "9081:8080"
    privileged: true
    user: root
    restart: always
    #container_name: jenkins
    environment:
       JAVA_OPTS: '-Djava.util.logging.config.file=/var/jenkins_home/log.properties'
       JAVA_HOME: /home/felix/app/jdk/jdk-17.0.2
       MAVEN_HOME: /home/felix/app/maven/apache-maven-3.8.8
       PATH: $PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

接下来新建一个Jenkins任务验证是否能远程运行在Linux服务器上;
执行shell里一般就

BUILD_ID=DONTKILLME
#查看当前的工作路径
export PROJ_PATH=`pwd`
#jdk home
export JAVA_HOME=/home/xxx/xxx/jdk17
# 环境变量生效
. /etc/profile

#app应用jar包名称
APP_NAME=xxx-xxx.jar
#app jar相对于当前工作路径内部的相对路径
APP_JAR_PATH=xxx-xxx/target
#jar包运行的工作路径
APP_RUN_PATH=/home/xxx/xxx/xxx/

mvn clean package -U -Dmaven.test.skip=true
mvn package -Dmaven.test.skip=true
#jar运行路径不存在自动创建,jar包强制覆盖之前的
mkdir -p $APP_RUN_PATH && /bin/cp -rf $PROJ_PATH/$APP_JAR_PATH/$APP_NAME $APP_RUN_PATH
cd $APP_RUN_PATH
#运行脚本
#./xxx.sh restart

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
进入任务查看执行结果,可以看到命令执行成功

在这里插入图片描述

Jenkins自动化部署任务开发

自动部署大致过程
在这里插入图片描述

自动化部署的脚本demo

#!/usr/bin/env bash
#编译+部署order站点

#需要配置如下参数
# 项目路径, 在Execute Shell中配置项目路径, pwd 就可以获得该项目路径
# export PROJ_PATH=这个jenkins任务在部署机器上的路径

# 输入你的环境上tomcat的全路径
# export TOMCAT_APP_PATH=tomcat在部署机器上的路径

### base 函数



killTomcat()
{
    pid=`ps -ef | grep $PROJ_NAME | grep java |grep -v grep |awk '{print $2}'`
    echo "tomcat Id list :$pid"
    if [ "$pid" = "" ]
    then
      echo "no tomcat pid alive"
    else
      kill -9 $pid
    fi
}

echo $PROJ_PATH
echo $PROJ_NAME
echo $TOMCAT_APP_PATH

cd $PROJ_PATH/$PROJ_NAME
/home/ubuntu/app/maven/apache-maven-3.6.3/bin/mvn clean install

# 停tomcat
killTomcat

# 删除原有工程
rm -rf $TOMCAT_APP_PATH/$PROJ_NAME.jar
#rm -f $TOMCAT_APP_PATH/webapps/ROOT.war
#rm -f $TOMCAT_APP_PATH/webapps/order.war

# 复制新的工程
cp $PROJ_PATH/$PROJ_NAME/target/$PROJ_NAME-0.0.2-SNAPSHOT.jar $TOMCAT_APP_PATH/$PROJ_NAME/
cd $TOMCAT_APP_PATH/$PROJ_NAME
mv $PROJ_NAME-0.0.1-SNAPSHOT.jar $PROJ_NAME-0.0.1-SNAPSHOT.jar.bak
mv $PROJ_NAME-0.0.2-SNAPSHOT.jar $PROJ_NAME-0.0.1-SNAPSHOT.jar

#cd $TOMCAT_APP_PATH/webapps/
#mv order.war ROOT.war

# 启动Tomcat
echo 'start tomcat'
echo $TOMCAT_APP_PATH/$PROJ_NAME
sh $TOMCAT_APP_PATH/$PROJ_NAME/start.sh

然后去jenkins新建一个任务
在这里插入图片描述

在这里插入图片描述

当前目录指在jenkins的workspace下我们创建的任务文件夹下面
ps:这里要注意里面的仓库地址要换成git开头的
这里的凭证是访问这个代码仓库的凭证

git@github.com:DoubleC77/sell.git

在这里插入图片描述

在这里插入图片描述

export PROJ_PATH=pwd,注意有两个点。不是引号,是键盘上波浪线下面那个符号。
在这里插入图片描述

到此,任务创建完成,我们可以进行构建(第一次构建很慢,因为要下jar包和初始化maven环境)

在这里插入图片描述

发布的时候选择分支

在插件里安装上Git Parameter,然后在参数化构建过程配上这个参数,给个默认值origin/master.
接着在源码管理中获取上面的的分支${branch}(这里的branch是上面配置的别名)

然后就可以在build的时候选择分支了。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

build后自动打tag

在源码管理处点击高级设置仓库name,然后在构建后操作中push tag;
tag命名v1.0.$BUILD_NUMBER$BUILD_NUMBER代表每次build的次数每次build后会自增);
Target remote name则填上面源码管理里填写的仓库name

在这里插入图片描述

在这里插入图片描述

在当前服务器build完后传输到多台服务器(Publish Over SSH)

先在插件中安装Publish Over SSH,然后在系统配置中配置上对应的服务的ssh连接方式.

之后在对应的任务中配置当前build之后要传输到哪些服务器中.
配置ssh远程服务

依次点击-“系统管理”-“系统配置”,找到"Publish over SSH"

  1. "Passphrase"输入框中填写通用密码,也可以指定私钥路径;
  2. "SSH Servers"处点击"新增按钮",新增一个远程主机;
  3. "Name"输入框中填写这个远程主机的名称;
  4. "Hostname"输入框中填写IP地址,或者节点能够解析的主机名称;
  5. "Username"输入框中填写用于远程登录的用户名;
  6. "Remote Directory"输入框中填写远程主机存放文件的目录,这个目录必须已存在;
  7. 如果当前的远程主机密码不是第二步配置的通用密码,可以点击右下角的"高级",在Password输入框中填写这个远程主机的密码;
  8. 点击"Test Configuration"测试配置,如果报错,根据错误提示进行相应的更改。

在这里插入图片描述

配置任务

在高级中记得把日志打开,不然失败了一脸懵逼.
Exec command中执行脚本时得cd到工作目录,不然就是当前用户的home目录,比如用的root账户ssh连接的,那么当前目录是/root

  1. Job中新增一个"构建后操作",选择"Send build artifacts over SSH"
  2. "SSH Server"-"Name"中选择刚才我们配置的远程主机
  3. "Source files"中填写源文件,相对路径基于JOB目录。我们的文件路径为${WORKSPACE}/{JOB}/target/dist.zip,这里填写target/*.zip用于匹配target目录下的所有以zip结尾的文件
  4. "Remove prefix"中填写需要删除的路径前缀,如果不填写,那么复制到远程主机的结构为
    target/dist.zip,我们不需要target这个目录,所以这里填写"target"
  5. "Remote directory"中填写远程目录路径,这个路径是基于在配置远程主机时填写的路径,前面我们填写的路径为/opt/jenkins,这里填写target,组合起来就是/opt/jenkins/target目录
  6. "Exec command"中填写复制完成后需要在目标主机中执行的命令,如果命令过多,可以写一个脚本,在这里调用它

在这里插入图片描述

输出日志
在这里插入图片描述

参考了大佬的博文
https://juejin.cn/post/6973959950993195044

如果要发布远端服务器上的实例可以参考下面的博文
https://blog.csdn.net/u012946310/article/details/80969447
添加链接描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值