Skip to content

Commit

Permalink
[+]first commit
Browse files Browse the repository at this point in the history
  • Loading branch information
zuozewei committed Mar 18, 2019
1 parent 4602d33 commit ef9684a
Show file tree
Hide file tree
Showing 9 changed files with 247 additions and 0 deletions.
9 changes: 9 additions & 0 deletions .idea/Jenkins-CI.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

33 changes: 33 additions & 0 deletions Jenkins-Maven-SpringBoot-Docker/Dockerfile
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}
40 changes: 40 additions & 0 deletions Jenkins-Maven-SpringBoot-Docker/buildimage.sh
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!!!"
~
40 changes: 40 additions & 0 deletions Jenkins-Maven-SpringBoot/build.sh
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!!!"
~
~
9 changes: 9 additions & 0 deletions README.md
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 SonarQube-dingding-notifications-python/SonarQubeDingtalk.py
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()

0 comments on commit ef9684a

Please sign in to comment.