jenkins配置&插件&发版了解
jenkins
https://mirrors.jenkins.io/war-stable/2.222.1/ 包下载地址
jenkins镜像源修改
sed -i 's/https:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
sed -i 's/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
http://mirror.xmission.com/jenkins/plugins/
java
https://www.oracle.com/cn/java/technologies/javase/javase8-archive-downloads.html java下载
tar xf jdk-8u144-linux-x64.tar.gz
mv jdk-8u144-linux-x64 /usr/local/jdk
vim ~/.bashrc
export JAVA_HOME=/usr/local/jdk #建议使用自带的java,不然会出现版本兼容各种问题
export PATH=${JAVA_HOME}/bin:$PATH
启动jenkins
nohup java -Dhudson.model.DownloadService.noSignatureChecke=true \
-DJENKINS_HOME=/app/jenkins -jar /app/jenkins/jenkins.war &
maven
https://maven.apache.org/download.cgi
https://dlcdn.apache.org/maven/maven-3/3.9.0/binaries/apache-maven-3.9.0-bin.tar.gz
[root@vm ~]# tar zxf apache-maven-3.9.0-bin.tar.gz -C /usr/local/
[root@vm ~]# vim /etc/profile
...
export MAVEN_HOME=/usr/local/apache-maven-3.6.0
export PATH=$PATH:$MAVEN_HOME/bin
[root@vm ~]# source /etc/profile
[root@vm ~]# mvn -v
Apache Maven 3.9.0
系统设置->全局工具配置->Maven->Maven 安装
创建一条pipeline任务
node {
stage ("build"){
mavenHome = tool 'maven' #这里名字一定要与全局工具配置里的名字一致才能调用
sh "${mavenHome}/bin/mvn -v"
}
}
mvn clean install -DskipTests
mvn clean package
ant
https://archive.apache.org/dist/ant/binaries/apache-ant-1.10.10-bin.tar.gz
[root@vm ~]# tar zxf apache-ant-1.10.10-bin.tar.gz -C /usr/local/
[root@vm ~]# vim /etc/profile
...
export ANT_HOME=/usr/local/apache-ant-1.10.10
export PATH=$PATH:$MAVEN_HOME/bin:$ANT_HOME/bin
source /etc/profile
[root@vm ~]# source /etc/profile
node {
stage ("build"){
antHome = tool 'ANT'
sh "${antHome}/bin/ant -version"
}
}
gradle
https://downloads.gradle-dn.com/distributions/gradle-7.0-bin.zip
[root@vm ~]# unzip gradle-7.0-bin.zip -d /usr/local/
[root@vm ~]# vim /etc/profile
...
export GRADLE_HOME=/usr/local/gradle-7.0
export PATH=$PATH:$GRADLE_HOME/bin
source /etc/profile
[root@vm ~]# source /etc/profile
node {
stage ("gradlebuild"){
gradleHome = tool 'GRADLE'
sh "${gradleHome}/bin/gradle -v"
}
}
Gradle常用命令
gradlew -v 版本号,首次运行,没有gradle的要下载的哦。
gradlew clean 删除HelloWord/app目录下的build文件夹
gradlew build 检查依赖并编译打包
gradlew assembleDebug 编译并打Debug包
gradlew assembleRelease 编译并打Release的包
gradlew installRelease Release模式打包并安装
gradlew uninstallRelease 卸载Release模式包
node
https://nodejs.org/download/release/v14.10.1/node-v14.10.1-linux-x64.tar.xz
[root@vm ~]# tar xf node-v14.10.1-linux-x64.tar.xz -C /usr/local/
[root@vm ~]# vim /etc/profile
...
export NODE_HOME=node-v14.10.1-linux-x64
export PATH=$PATH:$NODE_HOME/bin
[root@vm ~]# source /etc/profile
node {
stage ("npmbuild"){
sh """
export npmHome=/usr/local/node-v14.10.1-linux-x64
export PATH=\$PATH:\$npmHome/bin
npm -v
"""
}
}
插件了解
Jenkins自带推荐插件:Git,Folders,BuildTimeout,Credentials Binding,Timestamper,Workspace Cleanup,Ant,Gradle,Pipeline,GitHub Branch Source等等
Git parameter git参数插件
Role-Based Strategy 角色管理
Generic Webhook Trigger 触发构建
gitlab plugin 触发构建
ssh Publisher 上传执行shell
saltstack plugin 批量自动化发布
log-parser-plugin 增加过滤条件显示日志
生成Jenkinfile方法(项目->Pipeline Syntax->片段生成器)选择salt: Send a message to Salt API补充信息
rancher插件 更新镜像
Nexus Artifact Uploader上传制品
Maven Artifact ChoiceListProvider (Nexus) 选择构建包
jenkins发版
前端打包
yarn install && npm run build:uat
#方法一
rsync -az --delete dist/ /app/nginx/static/test/
#方法二
cp -rf dist/* test/ && zip -r static.zip test/*
unzip -od /app/nginx/static static.zip
方法三
zip -r $BUILD_TAG.zip dist/*
mv *.zip /app/
ansible -i /root/ansible/hostip proxy -m copy -a \
'src=/app/$BUILD_TAG-admin.zip dest=/usr/share/nginx/html/'
ansible -i /root/ansible/hostip proxy -m shell -a \
'unzip -o /usr/share/nginx/html/$BUILD_TAG-admin.zip -d /usr/share/nginx/html/"
后端打包
mvn -T 8 clean install -Dmaven.test.skip=true
mvn clean package -s ./settings.xml -Dmaven.test.skip=true
打镜像
FROM openjdk:17.0.2
ADD ./api-0.0.1-SNAPSHOT.jar /app.jar
ENV JAVA_OPTS "-Xms3072m -Xmx3072m -XX:NewRatio=3 -XX:SurvivorRatio=4 -XX:HeapDumpPath=/logs/dump/front/document_service.dump"
ENTRYPOINT exec java $JAVA_OPTS -jar /app.jar
tag=`date -d today +"%Y%m%d%H%M"
docker build -t kw.com:80/app/admin:$tag .
docker push kw.com:80/app/admin:$tag
docker rmi kw.com:80/app/admin:$tag
#打通k8s
export KUBECONFIG=$HOME/.kube/config:$HOME/kube/config_perf
kubectl config use-context dev
kubectl set image deployment/admin container-1=kw.com:80/app/admin:$tag
jar包运行
tag=`date -d today +"%Y%m%d%H%M"
mv ./target/admin.jar /app/admin-$tag.jar
ansible dev -m copy -a "src=/app/admin-$tag.jar dest=/app/dev/"
ansible dev -m shell -a "sed -i 's/admin-[0-9]*.jar/admin-$tag.jar/g' \
/etc/supervisor/conf.d/admin.conf"
ansible dev -m shell -a "supervisorctl update && supervisorctl restart admin"
ansible dev -m shell -a "bash /etc/supervisor/conf.bak/rm.sh"
rm /app/admin-$tag.jar
supervisor服务
cat admin.conf
[program:admin]
command=bash -c "/usr/bin/java -jar -Dhwenvironment=uat /app/dev/admin-282204291446.jar"
redirect stderr= true
autorestart=true
startretries=999
stopwaitsecs=300
stdout_logfile=//app/dev/log/admin-stdout-supervisor.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=20
jar包清理脚本
cat rm.sh
for i in cheat common home admin
do
num=`ls /app/dev/.jar|grep $i |wc -l`
jar=`ls -lrt /app/dev/*.jar |grep $i|awk '{print $NF}' |head -1`
if [ $num -gt 5 ]
then
rm -f $jar & echo "delete $jar"
fi
done