先安装jenkins
我的jenkins
版本是2.401
一般推荐直接部署jenkins
到宿主机上;
我是部署到了docker
中,宿主机的环境直接读取是读不到的,还需要额外的映射
运行环境ubuntu
搭建jenkins
安装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
添加子节点
业务上打包的服务一多,一台jenkins
服务可能顶不住,这个时候添加一个jenkins
子节点分担下build
任务会好很多;当前所有的配置都还是在当前的jenkins
上的;
添加linux
服务器的节点,工作目录可以选择当前jenkins
的数据存放目录;
如果是使用的ssh
密钥连接仓库这里配置里的凭据可以不填;
如果是使用账号密码连接仓库凭据是需要写的。
仓库配置这里的凭据是连接git
仓库的
在节点列表可以看到已经添加成功,点击名称,测试是否能进行连接。
新建任务
build
之前需要限制一个运行节点,不配置的话默认就是当前jenkins
所在的节点;
如果有多个节点但是不配置,默认是随机抽取一个节点.
如果想用本机部署,并且是本机是docker
部署的,要注意先关的jdk
和maven
环境读取;
比如我当前就是docker
部署的jenkins
的,打包的时候需要用到maven
和jdk
- 将
maven
和jdk
通过volume
挂载到容器内,实现共享配置 - 然后配置容器的
jdk
和maven
环境变量
附上一份我的配置
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"
;
- 在
"Passphrase"
输入框中填写通用密码,也可以指定私钥路径; - 在
"SSH Servers"
处点击"新增按钮",新增一个远程主机; - 在
"Name"
输入框中填写这个远程主机的名称; - 在
"Hostname"
输入框中填写IP
地址,或者节点能够解析的主机名称; - 在
"Username"
输入框中填写用于远程登录的用户名; - 在
"Remote Directory"
输入框中填写远程主机存放文件的目录,这个目录必须已存在; - 如果当前的远程主机密码不是第二步配置的通用密码,可以点击右下角的"高级",在
Password
输入框中填写这个远程主机的密码; - 点击
"Test Configuration"
测试配置,如果报错,根据错误提示进行相应的更改。
配置任务
在高级中记得把日志打开,不然失败了一脸懵逼.
在Exec command
中执行脚本时得cd
到工作目录,不然就是当前用户的home
目录,比如用的root
账户ssh
连接的,那么当前目录是/root
- 在
Job
中新增一个"构建后操作",选择"Send build artifacts over SSH" - 在
"SSH Server"-"Name"
中选择刚才我们配置的远程主机 - 在
"Source files"
中填写源文件,相对路径
,基于JOB目录
。我们的文件路径为${WORKSPACE}/{JOB}/target/dist.zip
,这里填写target/*.zip
用于匹配target
目录下的所有以zip
结尾的文件 - 在
"Remove prefix"
中填写需要删除的路径前缀,如果不填写,那么复制到远程主机的结构为
target/dist.zip
,我们不需要target
这个目录,所以这里填写"target"
。 - 在
"Remote directory"
中填写远程目录路径,这个路径是基于在配置远程主机时填写的路径,前面我们填写的路径为/opt/jenkins
,这里填写target
,组合起来就是/opt/jenkins/target
目录 - 在
"Exec command"
中填写复制完成后需要在目标主机中执行的命令,如果命令过多,可以写一个脚本,在这里调用它
输出日志
参考了大佬的博文
https://juejin.cn/post/6973959950993195044
如果要发布远端服务器上的实例可以参考下面的博文
https://blog.csdn.net/u012946310/article/details/80969447
添加链接描述