-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
zuozewei
committed
Mar 18, 2019
1 parent
4602d33
commit ef9684a
Showing
9 changed files
with
247 additions
and
0 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
# Dockerfile | ||
# 基于的镜像 | ||
FROM frolvlad/alpine-oraclejdk8 | ||
|
||
# 数据挂载点 | ||
VOLUME /usr/local/app/logs | ||
|
||
# 指定路径下的copy内容到容器中路径下 | ||
ADD person-0.0.1-SNAPSHOT.jar /usr/local/app/app.jar | ||
|
||
# 指定镜像的默认入口 | ||
# -Djava.security.egd=file:/dev/./urandom 可解决tomcat可能启动慢的问题 | ||
ENTRYPOINT java ${JAVA_OPTS} ${JVM_GC_LOG_PATH} -Djava.security.egd=file:/dev/./urandom -jar /usr/local/app/app.jar | ||
|
||
# 对外端口 | ||
EXPOSE 8081 | ||
|
||
# 工作目录 | ||
WORKDIR /usr/local/app | ||
|
||
# JVM参数 | ||
ARG JAVA_OPTS="-server -Xms1024M -Xmx1024M -XX:PermSize=256M -XX:MaxPermSize=256M \ | ||
-XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDetails \ | ||
-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=127.0.0.1 \ | ||
-Dcom.sun.management.jmxremote.port=10086 -Dcom.sun.management.jmxremote.ssl=false \ | ||
-Dcom.sun.management.jmxremote.authenticate=false" | ||
|
||
# log路径 | ||
ARG JVM_GC_LOG_PATH="-XX:ErrorFile=/usr/local/app/logs/gc/hs_err_pid%p.log -XX:HeapDumpPath=/usr/local/app/logs/gc" | ||
|
||
# JVM环境变量 | ||
ENV JAVA_OPTS=${JAVA_OPTS} | ||
ENV JVM_GC_LOG_PATH=${JVM_GC_LOG_PATH} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
#!/usr/bin/env bash | ||
# 设置系统时间 | ||
DATE=$(date +%Y%m%d) | ||
# 设置程序目录 | ||
DIR=/usr/local/app | ||
# 设置Jar名称 | ||
JARFILE=person-0.0.1-SNAPSHOT.jar | ||
# 设置Docker镜像&容器名称 | ||
SERVER_NAME=springboot-docker-demo | ||
# 容器id | ||
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}') | ||
# 镜像id | ||
IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}') | ||
|
||
# 判断是否存在backp目录,如果不存储就创建 | ||
if [ ! -d $DIR/backup ];then | ||
mkdir -p $DIR/backup | ||
fi | ||
cd $DIR | ||
|
||
# 杀掉当前的容器及镜像 | ||
docker stop $CID | ||
docker rm $CID | ||
docker rmi $IID | ||
|
||
# 备份旧程序 | ||
mv $JARFILE $DIR/backup/$JARFILE$DATE | ||
# 部署新程序 | ||
mv -f /root/jenkins-in/$JARFILE . | ||
# build镜像 | ||
docker build -t $SERVER_NAME . | ||
|
||
echo "The service will be starting" | ||
# 运行容器 | ||
docker run --name $SERVER_NAME -d -p 8081:8081 $SERVER_NAME | ||
|
||
cd backup/ | ||
ls -lt|awk 'NR>5{print $NF}'|xargs rm -rf | ||
echo "starting success!!!" | ||
~ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
#!/usr/bin/env bash | ||
#格式化时间 | ||
DATE=$(date +%Y%m%d) | ||
#设置程序目录 | ||
DIR=/usr/local/app | ||
#设置Jar名称 | ||
JARFILE=person-0.0.1-SNAPSHOT.jar | ||
|
||
#判断是否存在backp目录,如果不存储就创建 | ||
if [ ! -d $DIR/backup ];then | ||
mkdir -p $DIR/backup | ||
fi | ||
cd $DIR | ||
|
||
#杀掉当前运行的旧程序 | ||
ps -ef | grep $JARFILE | grep -v grep | awk '{print $2}' | xargs kill -9 | ||
#备份旧程序 | ||
mv $JARFILE $DIR/backup/$JARFILE$DATE | ||
#部署新程序 | ||
mv -f /root/jenkins-in/$JARFILE . | ||
echo "The service will be starting" | ||
#后台启动程序并设置Jvm参数、开启JMX、打印GC日志 | ||
java -server -Xms1024M -Xmx1024M -XX:PermSize=256M \ | ||
-XX:MaxPermSize=256M -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDetails \ | ||
-Xloggc:./gc.log \ | ||
-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=127.0.0.1 \ | ||
-Dcom.sun.management.jmxremote.port=10086 -Dcom.sun.management.jmxremote.ssl=false \ | ||
-Dcom.sun.management.jmxremote.authenticate=false \ | ||
-jar $JARFILE --spring.profiles.active=dev > /nohup 2>&1>out.log & | ||
|
||
if [ $? = 0 ];then | ||
sleep 30 | ||
tail -n 50 out.log | ||
fi | ||
|
||
cd backup/ | ||
ls -lt|awk 'NR>5{print $NF}'|xargs rm -rf | ||
echo "starting success!!!" | ||
~ | ||
~ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,11 @@ | ||
# Jenkins-CI | ||
Blog Demo & Source code (文章示例及源码) | ||
|
||
## 持续集成系列 | ||
|
||
#### --------------代码扫描---------------- | ||
[Jenkins+SonarQube+Gitlab搭建自动化持续代码扫描质量平台](https://mp.weixin.qq.com/s?__biz=MzIwNDY3MDg1OA==&mid=2247484621&idx=1&sn=10c5efcea84cdd7e5710f7bbb0fb9391&chksm=973dd628a04a5f3ef3bfd7fbf8e8c1245f07aea6123220e5192890804c7c32dea29feb98f47c&scene=21#wechat_redirect) | ||
|
||
#### --------------自动化部署-------------- | ||
[性能环境之Jenkins+Maven自动化部署SpringBoot压测环境(实战篇)](https://mp.weixin.qq.com/s?__biz=MzIwNDY3MDg1OA==&mid=2247484576&idx=1&sn=1f1b6f8b3e882cd6f88f8858ed447c0c&chksm=973dd645a04a5f53ce6909e0cdbb6b62d747ecd5d4e836e77908a65ab46c201643d0f66068d5&scene=21#wechat_redirect) | ||
[性能环境之Jenkins+Maven自动化部署SpringBoot压测环境(Docker篇)](https://mp.weixin.qq.com/s?__biz=MzIwNDY3MDg1OA==&mid=2247484589&idx=1&sn=dc929ec19ca9cc2830c8029c13bfaf73&chksm=973dd648a04a5f5e8572e7ce19a893447da69b0f0cb6d52847286305cafc671e3ffa65557c7a&scene=21#wechat_redirect) |
96 changes: 96 additions & 0 deletions
96
SonarQube-dingding-notifications-python/SonarQubeDingtalk.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
# coding=utf-8 | ||
|
||
''' | ||
@author: zuozewei | ||
@file: SonarQubeDingtalk.py | ||
@time: 2019/3/5 18:00 | ||
''' | ||
import requests,json,jenkins,os,time | ||
|
||
# 接受jenkins当前JOB_NAME参数 | ||
projectName = os.getenv("JOB_NAME") | ||
|
||
def sendding(Dingtalk_access_token,content,title,messageUrl): | ||
url = Dingtalk_access_token | ||
pagrem = { | ||
"msgtype": "link", | ||
"link": { | ||
'title':title, | ||
"text": content, | ||
'picUrl': messageUrl, | ||
'messageUrl':'http://172.16.14.251:9088/dashboard?id='+ projectName | ||
} | ||
} | ||
|
||
headers = { | ||
'Content-Type': 'application/json' | ||
} | ||
|
||
# 发送消息 | ||
requests.post(url, data=json.dumps(pagrem), headers=headers) | ||
|
||
def notification(): | ||
# 钉钉hook地址 | ||
Dingtalk_access_token = 'your Dingtalk_access_token' | ||
# sonar API | ||
sonar_Url = 'http://172.16.14.251:9088/api/measures/search?projectKeys='+ projectName +'&metricKeys=alert_status%2Cbugs%2Creliability_rating%2Cvulnerabilities%2Csecurity_rating%2Ccode_smells%2Csqale_rating%2Cduplicated_lines_density%2Ccoverage%2Cncloc%2Cncloc_language_distribution' | ||
# 获取sonar指定项目结果 | ||
resopnse = requests.get(sonar_Url).text | ||
# 转换成josn | ||
result = json.loads(resopnse) | ||
bug = 0 | ||
leak = 0 | ||
code_smell = 0 | ||
coverage = 0 | ||
density = 0 | ||
status = '' | ||
statusStr = '' | ||
|
||
# 解析sonar json结果 | ||
for item in result['measures']: | ||
if item['metric']=="bugs": | ||
bug = item['value'] | ||
elif item['metric']=="vulnerabilities": | ||
leak = item['value'] | ||
elif item['metric']=='code_smells': | ||
code_smell = item['value'] | ||
elif item['metric']=='coverage': | ||
coverage = item['value'] | ||
elif item['metric']=='duplicated_lines_density': | ||
density = item['value'] | ||
elif item['metric']=='alert_status': | ||
status = item['value'] | ||
else: | ||
pass | ||
|
||
# 判断新代码质量阀状态 | ||
if status == 'ERROR': | ||
# 错误图片 | ||
messageUrl = 'http://www.iconsdb.com/icons/preview/soylent-red/x-mark-3-xxl.png' | ||
statusStr = '失败' | ||
elif status == 'OK': | ||
statusStr = '成功' | ||
# 正确图片 | ||
messageUrl = 'http://icons.iconarchive.com/icons/paomedia/small-n-flat/1024/sign-check-icon.png' | ||
|
||
# 消息内容。如果太长只会部分展示 | ||
code_reslut= "Bug数:" + bug + "个," + \ | ||
"漏洞数:" + leak + "个," + \ | ||
"可能存在问题代码:"+ code_smell + "行," + \ | ||
"覆盖率:" + coverage + "%," + \ | ||
"重复率:" + density + "%" | ||
print("静态代码扫描统计:"+"状态:"+ status +","+code_reslut) | ||
|
||
# 连接jenkins | ||
server=jenkins.Jenkins(url="http://172.16.14.251:8080",username='user',password="password") | ||
|
||
# 获取指定项目最后编译number | ||
get_number = server.get_job_info(projectName)['lastBuild']['number'] | ||
print("BUILD_NUMBER:"+ str(get_number)) | ||
|
||
sendding(Dingtalk_access_token, content=code_reslut, title=projectName+"#"+str(get_number)+"新代码扫描" + statusStr,messageUrl=messageUrl) | ||
|
||
if __name__=="__main__": | ||
# 等待10秒,确保SonarQube刷新结果 | ||
time.sleep(10) | ||
notification() |