1Jenkins自动化部署项目
2linux服务器直接安装
3环境搭建
3.1服务器装java
#直接去下载 手动解压 改环境 路径自己定(如果报错或者出问题可能需要赋予权限)
https://blog.csdn.net/jzycloud/article/details/114123530
#验证结果
java -version
#将jdk的安装路径加入到JAVA_HOME
vi /etc/profile
#set java environment
JAVA_HOME=/home/java/jdk1.8.0_301
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME CLASSPATH PATH
#修改/etc/profile之后让其生效
. /etc/profile (注意 . 之后应有一个空格)
#控制台输入 java 测试是否成功
3.2装maven
#新建目录/usr/local/apps/maven,并cd进去
#下载maven
wget https://mirrors.aliyun.com/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
#解压
tar zvxf apache-maven-3.6.3-bin.tar.gz
#修改配置文件 依据项目的 包路径 /mnt/sdc/maven_repo
/usr/local/apps/maven/apache-maven-3.6.3/conf/settings.xml
#授权写
chmod 777 -R /mnt/sdc/maven_repo
#配置环境变量
vi /etc/profile
export MAVEN_HOME=/usr/local/apps/maven/apache-maven-3.6.3/
export PATH=$MAVEN_HOME/bin:$PATH
#刷新环境变量
source /etc/profile
#测试结果
mvn -version
3.3装git
#安装
yum -y install git
#查看版本
git --version
#查看路径
whereis git
3.4装supervisor(jenkinsfile文件中的命令用到)
#一路安装
yum install -y epel-release
yum install -y supervisor
#启动服务并设置开机自启动
systemctl start supervisord.service && systemctl enable supervisord.service
#把最后一行的.ini改成.conf
vi /etc/supervisor.conf
#在/etc/supervisor.d/下面新建一个文件管理jar服务 该文件最后有配置方式,先继续往下看
vim /etc/supervisor.d/app.conf
#先读取改了哪些配置
supervisorctl reread
#再更新 修改配置文件后要
supervisorctl update
3.5装jenkins
#下载
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
#安装密钥
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
#安装jenkins 可能会因为网慢 报错 多试几次:当看到jenkins版本和complete字样时,表示已经安装完成 !!注意:这里不能有error
yum install jenkins
#配置目录的路径 自动配好的都是
/usr/lib/jenkins/ #jenkins安装目录,war包会放在这里。
/etc/sysconfig/jenkins #jenkins配置文件,“端口”,“JENKINS_HOME”等都可以在这里配置。
/var/lib/jenkins/ #默认的JENKINS_HOME。
/var/log/jenkins/jenkins.log # jenkins日志文件。
#修改端口号8099
vi /etc/sysconfig/jenkins
#修改jdk !! 大部分错误都是jdk没有配对路径 !!
vi /etc/init.d/jenkins
#查看密码
tail /var/lib/jenkins/secrets/initialAdminPassword
#系统启动
systemctl start jenkins
#重启也可以网站这样 试过一次 很慢
http://127.0.0.1:8099/restart
#是否启动
ps -ef | grep jenkins
#查看报错日志
systemctl status jenkins.service
journalctl -xe
#修改配置后要
systemctl daemon-reload
#直接启动jar的方式 不要用
java -jar jenkins.war --ajp13Port=-1 --httpPort=8081
3进入工作台配置
3.1省略步骤(主要是没图)
-
根据你配的端口号路径:http://127.0.0.1:8099/ 会先让你输入密码,查看密码命令: tail /var/lib/jenkins/secrets/initialAdminPassword
-
然后注册一个账号
-
选择新手推荐安装插件-》一路保存确认
3.2此时已经成功进来页面了
如图:
3.2.1管理插件!先装这几个插件:maven ssh 如图:
3.2.2全局工具配置
3.2.2.1配置JDK
3.2.2.2配置maven
3.2.3配置系统
3.2.3.1全局环境变量配置
3.2.3.2ssh配置
3开始构建项目
3.1流水线构建方式 使用jenkinsfile文件
-
新建item
-
如图:
-
构建触发器 啥也没选:就是手动点击构建
-
配置流水线
-
点击保存即可
3.2git凭据生成
如图:
点击确定:没写id会自动生成id
3.3jenkinsfile文件配置
-
文件放在如图位置
-
jenkinsfile命令:
node { def GIT_COMMIT def GIT_PREVIOUS_SUCCESSFUL_COMMIT def CURRENT_JOB stage('拉取代码') { dir("/var/lib/jenkins/workspace/tttone") { //workspace文件 在第一次构建时生成! def arr = "${JOB_NAME}".split('/') CURRENT_JOB = arr[arr.length - 1] sh "pwd" def res = checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '424b34ca-这里是jenkins用户凭证的git用户id-dc3b62eaebfc', url: 'http://11.125.33.44项目的git路径.git']]]) sh "echo ${res}" GIT_COMMIT = res.get("GIT_COMMIT") GIT_PREVIOUS_SUCCESSFUL_COMMIT = res.get("GIT_PREVIOUS_SUCCESSFUL_COMMIT") } } stage('停止当前模块,释放内存') { sh "supervisorctl stop ${CURRENT_JOB}" } stage('编译公共模块') { dir("/var/lib/jenkins/workspace/tttone") { //如果当前下拉的和上次构建成功的commit id不同,install common sh "echo GIT_COMMIT:${GIT_COMMIT}" sh "echo GIT_PREVIOUS_SUCCESSFUL_COMMIT:${GIT_PREVIOUS_SUCCESSFUL_COMMIT}" sh "echo CURRENT_JOB:${CURRENT_JOB}" if ("${GIT_PREVIOUS_SUCCESSFUL_COMMIT}" != "${GIT_COMMIT}") { sh "mvn clean install" //如果多个公共模块 就直接一键 } // sh "mvn -f commen clean install" //如果只有一个commen 则用此方式 } } stage('构建当前模块') { dir("/var/lib/jenkins/workspace/wisdom_credit") { sh "mvn -f ${CURRENT_JOB} clean compile install package -Dmaven.test.skip=true " //-P dev 区分构建环境 -Dmaven.test.skip=true过滤测试用例 // sh "mvn clean compile install package " } } stage('移动至工作目录') { dir("/var/lib/jenkins/workspace/tttone") { sh "cp -f ./${CURRENT_JOB}/target/${CURRENT_JOB}.jar /mnt/sdc/project/tttServer/" } } stage('启动当前模块') { sh "supervisorctl restart ${CURRENT_JOB}" } stage('返回构建结果 ') { sh "supervisorctl status ${CURRENT_JOB}" } }
3.4supervisorctl文件配置(因为我用到了supervisorctl命令 所以需要配一些嘿嘿嘿命令)
-
如下操作:
#把最后一行的.ini改成.conf vi /etc/supervisor.conf #在/etc/supervisor.d/下面新建一个文件管理jar服务 vi /etc/supervisor.d/app.conf #先读取改了哪些配置 supervisorctl reread #再更新 修改配置文件后要 supervisorctl update
-
app.conf文件里的命令如下:注意:该文件编辑必须UTF-8格式 保存的时候选下编码格式为UTF-8!否则python可能不认!另外如果你是多个服务那你就复制粘贴搞多个 program。流水线也直接复制建多个。改完配置后记得更新!supervisorctl update!
[program:ttt2] environment=JAVA_HOME=/home/java/jdk1.8.0_301/bin ; directory = /mnt/sdc/project/tttServer ; 程序的启动目录 就是jar文件的路径 command = /home/java/jdk1.8.0_301/bin/java -jar -Xms1024m -Xmx1024m -Dspring.profiles.active=dev ttt2.jar ; 启动命令 jar的名字进项目pom文件可以配置 autostart = true ; 在 supervisord 启动的时候也自动启动 startsecs = 3 ; 启动 30 秒后没有异常退出,就当作已经正常启动了 autorestart = true ; 程序异常退出后自动重启 startretries = 3 ; 启动失败自动重试次数,默认是 3 user = root ; 用哪个用户启动 redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false stdout_logfile_maxbytes = 50MB ; stdout 日志文件大小,默认 50MB stdout_logfile_backups = 5 ; stdout 日志文件备份数 ; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录 stdout_logfile = /mnt/sdc/project/tttServer/logs/ttt2.log ;应用日志目录
3至此就OK了
3流水线日志到这里看
2web端部署项目
3先配置jenkins下载nodejs插件
配置全局工具,别名命令有用到,目录是服务器目录
3linux服务器下载nodejs
#建议下载比较新的
cd /usr/local/
wget https://nodejs.org/dist/v12.18.1/node-v12.18.1-linux-x64.tar.xz
#解压
tar xf node-v12.18.1-linux-x64.tar.xz
#需要创建软链接,以便全局使用
ln -s /usr/local/nodejs/bin/node /usr/bin/node
ln -s /usr/local/nodejs/bin/npm /usr/bin/npm
#完成校验
npm 或 node
3npm install 项目时会出现的问题
#查看下载镜像
npm config list
#切换成淘宝的下载镜像
npm config set registry https://r.npm.taobao.org
#npm清理缓存
npm cache clean -f
#我这边主要报错就是 用了ssh下载链接没权限啥的 改成https后就好了
#思路就是看日志 一句句看 错误描述的都比较清晰了
#切换下载方式 再npm install 成功
git config --global url."https://".insteadOf ssh://git@
#命令不好用:可以去B站看视频改这个 https
https://www.bilibili.com/video/bv1Vq4y1k71U
3jenkins构建自动部署
4创建流水线项目
4如图1:
4如图2:
4如图3
4流水线脚本命令:
node{
stage('环境输出') {
sh "pwd"
}
stage('拉取代码') {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '424--git用户凭证id--ebfc', url: 'http://47.1--git项目地址--web.git']]])
}
stage('打包,部署网站') {
dir("/var/lib/jenkins/workspace/项目名字/") { #这个cd路径看项目架构 有可能你都不需要这步
//使用NodeJS的npm进行打包
nodejs('node16'){
sh '''npm install
npm run build:prod ''' #这里构建 看你package.json文件的scripts是配置了哪些 dev等,,
}
}
dir("/var/lib/jenkins/workspace/wi项目名字/") {
sh "pwd"
sh "cp -rf ./dist/. /data/nginx/html/management" #我这里是nginx配好的对外访问路径
}
}
}
4成功