From bb103f5cf5fb28f0980b828f1fadf1a9e88e7212 Mon Sep 17 00:00:00 2001 From: ehlxr Date: Thu, 21 Jan 2021 11:27:13 +0800 Subject: [PATCH] update at 2021-01-21 11:27:13 by ehlxr --- .dockerignore | 7 +++ .drone.yml | 51 +++++++++++++++ .gitignore | 7 ++- Jenkinsfile | 76 +++++++++++++++++++++++ did-server/build.sh | 28 --------- did-server/docker/start.sh | 19 ------ did-server/src/main/resources/logback.xml | 13 ++-- {did-server/docker => docker}/Dockerfile | 1 - docker/build.sh | 55 ++++++++++++++++ docker/start.sh | 33 ++++++++++ 10 files changed, 233 insertions(+), 57 deletions(-) create mode 100644 .dockerignore create mode 100644 .drone.yml create mode 100644 Jenkinsfile delete mode 100755 did-server/build.sh delete mode 100755 did-server/docker/start.sh rename {did-server/docker => docker}/Dockerfile (88%) create mode 100755 docker/build.sh create mode 100755 docker/start.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..85a8e6d --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +**/.DS_Store +.idea +**/*.iml +**/target/ +**/dependency-reduced-pom.xml +logs +.vscode \ No newline at end of file diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..8fa562c --- /dev/null +++ b/.drone.yml @@ -0,0 +1,51 @@ +kind: pipeline +type: docker +name: default + +workspace: + path: /did + +steps: + - name: build + image: maven + commands: + - mvn clean install -DskipTests -e -U + - cp ./did-server/target/did-server*.jar ./docker + - echo -n "$(date -d @${DRONE_BUILD_CREATED} '+%Y%m%d_%H%M%S')_${DRONE_BUILD_NUMBER}, $(grep ".*" pom.xml | head -1 | awk -F '[>,<]' '{print $3})', latest" > .tags + + - name: docker + image: plugins/docker + settings: + repo: docker.ehlxr.me/ehlxr/did-server + dockerfile: ./did-server/docker/build/Dockerfile + registry: docker.ehlxr.me + username: + from_secret: docker_username + password: + from_secret: docker_password + build_args: + - SERVER_NAME=did-server + + # - name: deploy + # image: appleboy/drone-ssh + # settings: + # host: 158.101.68.196 + # username: root + # password: + # from_secret: ssh_password + # port: 22 + # script: + # - docker swarm init + # - docker service create --replicas 2 -p 4000:4000 --name blog ehlxr/blog:$(date -d @${DRONE_BUILD_CREATED} "+%Y%m%d_%H%M%S")_${DRONE_BUILD_NUMBER} + # - docker service update --image ehlxr/blog:$(date -d @${DRONE_BUILD_CREATED} "+%Y%m%d_%H%M%S")_${DRONE_BUILD_NUMBER} blog + + - name: notification + image: lddsb/drone-dingtalk-message + settings: + token: + from_secret: dingtalk_token + type: markdown + when: + status: + - failure + - success diff --git a/.gitignore b/.gitignore index 3a2b387..47a0b5f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,8 @@ +**/.DS_Store .idea -did.iml +**/*.iml **/target/ **/dependency-reduced-pom.xml -did-server/_build.sh \ No newline at end of file +logs +.vscode +**/*.jar \ No newline at end of file diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..0acefc8 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,76 @@ +pipeline { + agent any + + environment { + DOCKER_REGISTRY_USER = credentials('docker-registry-user') + DOCKER_REGISTRY_PWD = credentials('docker-registry-pwd') + DINGTALK_TOKEN = credentials('dingtalk-token') + DOCKER_IMAGE_TAG = createVersion() + } + + parameters { + gitParameter(branch: '', + branchFilter: '.*', + defaultValue: 'origin/master', + listSize: '10', + name: 'GIT_BRANCH', + quickFilterEnabled: true, + selectedValue: 'DEFAULT', + sortMode: 'DESCENDING_SMART', + tagFilter: '*', + type: 'PT_BRANCH_TAG', + description: 'Select your branch or tag.') + choice(name: 'MODULE_PARMS', choices: ['did-server'], description: 'select module of project') + string(name: 'DOCKER_IMAGE_TAG', defaultValue: '', description: 'docker 镜像 tag,默认为当前时间戳 + 编译号码,例如:20190909_113757_89') + } + + stages { + stage('Checkout') { + steps { + checkout([$class: 'GitSCM', + branches: [[name: "${params.GIT_BRANCH}"]], + doGenerateSubmoduleConfigurations: false, + extensions: [], + submoduleCfg: [], + userRemoteConfigs: [ + [ + credentialsId: 'git_credential', + url: 'https://git.ehlxr.me/ehlxr/did.git' + ] + ] + ]) + } + } + + stage('Build') { + steps { + sh "mvn clean install -DskipTests -e -U" + sh "cp ${MODULE_PARMS}/target/${MODULE_PARMS}*.jar && sh build.sh" + } + } + } + + post { + success { + sh sendMsg("Jenkins Pipeline Finished: SUCCESS! \n docker image tag is: ${env.DOCKER_IMAGE_TAG}") + } + failure { + sh sendMsg("Jenkins Pipeline Finished: FAILED!") + } + } + +} + +def createVersion() { + if("${env.DOCKER_IMAGE_TAG}" == ""){ + return new Date().format('yyyyMMdd_HHmmss') + "_${env.BUILD_NUMBER}" + } + + return "${env.DOCKER_IMAGE_TAG}" +} + +def sendMsg(String msg) { + return "curl -s https://oapi.dingtalk.com/robot/send?access_token=${env.DINGTALK_TOKEN} \ + -H 'Content-Type: application/json' \ + -d '{\"msgtype\": \"text\",\"text\": {\"content\": \""+ msg +"\"}}'" +} \ No newline at end of file diff --git a/did-server/build.sh b/did-server/build.sh deleted file mode 100755 index 1ac5cab..0000000 --- a/did-server/build.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh - -echo "############## start ##############" -BUILD_DATE=`date +%Y-%m-%d:%H:%M:%S` - -SERVER_NAME=`awk '/[^<]+<\/name>/{gsub(/|<\/name>/,"",$1);print $1;exit;}' pom.xml` -#SERVER_NAME=$(basename `pwd`) -mvn clean install -DskipTests -cp target/${SERVER_NAME}*.jar ./docker -cd docker - -err=$? -echo "############## $err ##############" -if [ "$err" -ne "0" ]; then - echo "############## build error ! ##############" - exit 1 -fi - -docker_url=ehlxr/${SERVER_NAME}:latest - -docker build --build-arg SERVER_NAME=${SERVER_NAME} -f ./Dockerfile -t ${docker_url} . - -docker push ${docker_url} - -rm ${SERVER_NAME}*.jar - -echo "build & push finish ..." -echo "############## ${BUILD_DATE} ##############" \ No newline at end of file diff --git a/did-server/docker/start.sh b/did-server/docker/start.sh deleted file mode 100755 index f22c1ac..0000000 --- a/did-server/docker/start.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh - -#HOSTNAME=`hostname | cut -c1-18` -LOGS_DIR="/data/logs" - -if [ ! -d ${LOGS_DIR} ]; then - mkdir -p ${LOGS_DIR} -fi -STDOUT_FILE=${LOGS_DIR}/${SERVER_NAME}.log - -JAVA_OPTS=" -Duser.timezone=\"Asia/Shanghai\" -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dfile.encoding=UTF8" - -JAVA_MEM_OPTS=" -server -Xmx${XMX:-512m} -Xms${XMS:-128m} -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC \ - -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=${LargePageSize:-4m} \ - -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 " - -echo "Starting the ${SERVER_NAME} ...\c" -#java -jar ${JAVA_OPTS} ${JAVA_MEM_OPTS} ./${SERVER_NAME}-*.jar > ${STDOUT_FILE} 2>&1 -java -jar ${JAVA_OPTS} ${JAVA_MEM_OPTS} ./${SERVER_NAME}-*.jar | tee -a ${STDOUT_FILE} 2>&1 \ No newline at end of file diff --git a/did-server/src/main/resources/logback.xml b/did-server/src/main/resources/logback.xml index 7ae8319..a38aa88 100644 --- a/did-server/src/main/resources/logback.xml +++ b/did-server/src/main/resources/logback.xml @@ -7,8 +7,8 @@ - - /data/logs/did/did-server-error.log + + ${LOG_PATH:.}/logs/did/did-server-error.log /data/logs/did/did-server-error.log.%d{yyyy-MM-dd} 30 @@ -24,8 +24,8 @@ - - /data/logs/did/did-server.log + + ./logs/did/did-server.log /data/logs/did/did-server.log.%d{yyyy-MM-dd} 30 @@ -36,11 +36,10 @@ - - - + + \ No newline at end of file diff --git a/did-server/docker/Dockerfile b/docker/Dockerfile similarity index 88% rename from did-server/docker/Dockerfile rename to docker/Dockerfile index 14ab67c..9e5a78a 100644 --- a/did-server/docker/Dockerfile +++ b/docker/Dockerfile @@ -11,6 +11,5 @@ COPY ${SERVER_NAME}*.jar /opt/ RUN chmod -R 755 /opt/ - EXPOSE 16830 16831 ENTRYPOINT ["/opt/start.sh"] \ No newline at end of file diff --git a/docker/build.sh b/docker/build.sh new file mode 100755 index 0000000..46f9747 --- /dev/null +++ b/docker/build.sh @@ -0,0 +1,55 @@ +#!/bin/sh + +set -e + +echo "############## start ##############" +BUILD_DATE=`date +%Y-%m-%d:%H:%M:%S` + +CURR_DIR=`basename $PWD` +if [[ ${CURR_DIR} != "docker" ]]; then + echo "############## must exec in docker dir ##############" + exit 2; +fi + +cd ../ +#SERVER_NAME=`awk '/[^<]+<\/name>/{gsub(/|<\/name>/,"",$1);print $1;exit;}' pom.xml` +#SERVER_NAME=$(basename `pwd`) +SERVER_NAME=${MODULE_PARMS} + +SERVER_JAR=$PWD/${MODULE_PARMS}/target/${SERVER_NAME}*.jar +#if [ ! -n "ls ${SERVER_JAR} >/dev/null 2>&1" ]; then +if [[ "`echo ${SERVER_JAR}`" != "${SERVER_JAR}" ]]; then + echo exist ${SERVER_JAR} skip maven build. +else + mvn clean install -DskipTests +fi + +cp ${SERVER_JAR} ./docker +cd docker + +if [[ ${DOCKER_IMAGE_TAG} ]];then + image_tag=${DOCKER_IMAGE_TAG} +else + echo "############## DOCKER_IMAGE_TAG is null ! ##############" + # image_tag=$(git symbolic-ref --short -q HEAD) + image_tag=`date "+%Y%m%d_%H%M%S"` +fi +echo "############## image_tag is: ${image_tag} ##############" + +base_url=docker.ehlxr.me +docker_url=${base_url}/ehlxr/${SERVER_NAME}:${image_tag} + +docker build --build-arg SERVER_NAME=${SERVER_NAME} -f ./Dockerfile -t ${docker_url} . +# get user pwd from environment +echo "${DOCKER_REGISTRY_PWD}" | docker login --username ${DOCKER_REGISTRY_USER} --password-stdin ${base_url} + +docker push ${docker_url} + +rm ${SERVER_NAME}*.jar +echo "############## build & push finish: ${BUILD_DATE} ##############" + +err=$? +if [[ "$err" -ne "0" ]]; then + echo "############## build error ! ##############" + exit 1 +fi \ No newline at end of file diff --git a/docker/start.sh b/docker/start.sh new file mode 100755 index 0000000..093f96c --- /dev/null +++ b/docker/start.sh @@ -0,0 +1,33 @@ +#!/bin/sh + +set -e + +#HOSTNAME=`hostname | cut -c1-18` +LOGS_DIR="/data/logs" +GC_LOGS_DIR="/data/gc" + +if [[ ! -d ${LOGS_DIR} ]]; then + mkdir -p ${LOGS_DIR} +fi +if [[ ! -d ${GC_LOGS_DIR} ]]; then + mkdir -p ${GC_LOGS_DIR} +fi + +STDOUT_FILE=${LOGS_DIR}/${SERVER_NAME}.log +CURRENT=`date "+%Y%m%d%H%M%S"` + +#JAVA_OPTS=" -Duser.timezone=\"Asia/Shanghai\" -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dfile.encoding=UTF8" + +#JAVA_MEM_OPTS=" -server -Xmx${XMX:-512m} -Xms${XMS:-128m} -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC \ +# -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=${LargePageSize:-4m} \ +# -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 \ +# -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:${GC_LOGS_DIR}/${SERVER_NAME}_${CURRENT}_gc.log \ +# -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${GC_LOGS_DIR}/${SERVER_NAME}_${CURRENT}.hprof" + +JAVA_MEM_OPTS=" -server -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:${GC_LOGS_DIR}/${SERVER_NAME}_${CURRENT}_gc.log \ + -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${GC_LOGS_DIR}/${SERVER_NAME}_${CURRENT}.hprof" + +echo "Starting the ${SERVER_NAME} ...\c" +chmod -R 755 ./${SERVER_NAME}*.jar +#java -jar ${JAVA_OPTS} ${JAVA_MEM_OPTS} ./${SERVER_NAME}*.jar > ${STDOUT_FILE} 2>&1 +java -jar ${JAVA_MEM_OPTS} ./${SERVER_NAME}*.jar | tee -a ${STDOUT_FILE} 2>&1 \ No newline at end of file