From 2c249d671606aa5df8b81403cc4ddadb0f9ef3ae Mon Sep 17 00:00:00 2001 From: liuxueli Date: Wed, 11 Dec 2019 17:29:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0CI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitlab-ci.yml | 123 +++++++++++++++++++++++++++++++++++++++++++++++++ autorelease.sh | 34 ++++++++++++++ 2 files changed, 157 insertions(+) create mode 100644 .gitlab-ci.yml create mode 100644 autorelease.sh diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..617d530 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,123 @@ +image: "docker:stable" + +services: + - docker:dind + +variables: + GIT_STRATEGY: "clone" + IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG + + +stages: + - build + - package + - release + - docker + +.build_before_script: + before_script: + - mkdir -p /tmp/padding_for_CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX/$CI_PROJECT_NAMESPACE/ + - ln -s $CI_PROJECT_DIR /tmp/padding_for_CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX/$CI_PROJECT_PATH + - cd /tmp/padding_for_CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX/$CI_PROJECT_PATH + +.build_fw_dns_plug: + extends: .build_before_script + image: git.mesalab.cn:7443/tango/tsg_master:master + script: + - source /etc/profile.d/MESA.sh + - mkdir -p build + - cd build + - cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE + - make + - make package + +.package_fw_dns_plug: + extends: .build_before_script + image: git.mesalab.cn:7443/tango/tsg_master:master + script: + - source /etc/profile.d/MESA.sh + - mkdir -p build + - cd build + - cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE + - make package + +build: + stage: build + extends: .build_fw_dns_plug + tags: + - share + variables: + BUILD_TYPE: "Debug" + artifacts: + name: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME" + paths: + - ./build/*.rpm + except: + - tags + +fw_dns_plug_debug: + stage: package + extends: .package_fw_dns_plug + tags: + - share + variables: + BUILD_TYPE: "Debug" + artifacts: + name: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME" + paths: + - ./build/*.rpm + only: + - tags + +fw_dns_plug_release: + stage: package + extends: .package_fw_dns_plug + tags: + - share + variables: + BUILD_TYPE: "Release" + artifacts: + name: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME" + paths: + - ./build/*.rpm + only: + - tags + +fw_dns_plug_release-release: + stage: release + image: git.mesalab.cn:7443/tango/tsg_master:master + tags: + - share + variables: + ARTIFACTS_JOB: "fw_dns_plug_release" + PROJECT_NAME: "fw_dns_plug" + USER_DEFINE: "release" + only: + - tags + script: + - /bin/bash -x ./autorelease.sh $CI_API_V4_URL $CI_PROJECT_URL $CI_PROJECT_ID $CI_TOKEN $CI_COMMIT_TAG $ARTIFACTS_JOB $PROJECT_NAME $USER_DEFINE + +fw_dns_plug_debug-release: + stage: release + image: git.mesalab.cn:7443/tango/tsg_master:master + tags: + - share + variables: + ARTIFACTS_JOB: "fw_dns_plug_debug" + PROJECT_NAME: "fw_dns_plug" + USER_DEFINE: "release" + only: + - tags + script: + - /bin/bash -x ./autorelease.sh $CI_API_V4_URL $CI_PROJECT_URL $CI_PROJECT_ID $CI_TOKEN $CI_COMMIT_TAG $ARTIFACTS_JOB $PROJECT_NAME $USER_DEFINE + +build-docker: + stage: docker + script: + - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY + - docker build -t $IMAGE_TAG . + - docker push $IMAGE_TAG + tags: + - share + only: + - master \ No newline at end of file diff --git a/autorelease.sh b/autorelease.sh new file mode 100644 index 0000000..34eaefb --- /dev/null +++ b/autorelease.sh @@ -0,0 +1,34 @@ +#!/bin/sh +if [ $# -lt 8 ] ; then + echo "USAGE: ./autorelease.sh [API_V4_URL] [PROJECT_URL] + [PROJECT_ID] [TOKEN] + [COMMIT_TAG] [JOB] [PROJECT_NAME] [USER_DEFINE]" + echo "$1; $2; $3; $4; $5; $6; $7; $8" +exit 1; +fi + +CI_API_V4_URL=$1 +CI_PROJECT_URL=$2 +CI_PROJECT_ID=$3 +CI_TOKEN=$4 +CI_COMMIT_TAG=$5 +ARTIFACTS_JOB=$6 +CI_PROJECT_NAME=$7 +USER_DEFINE=$8 + +res=`echo -e "curl --header \"PRIVATE-TOKEN: $CI_TOKEN\" $CI_API_V4_URL/projects/$CI_PROJECT_ID/releases/$CI_COMMIT_TAG -o /dev/null -s -w %{http_code}"| /bin/bash` + +if [[ $res == "200" ]]; then + eval $(echo -e "curl --request POST --header \"PRIVATE-TOKEN: $CI_TOKEN\" \ + --data name=\"$CI_PROJECT_NAME-$USER_DEFINE-$CI_COMMIT_TAG.zip\" \ + --data url=\"$CI_PROJECT_URL/-/jobs/artifacts/$CI_COMMIT_TAG/download?job=$ARTIFACTS_JOB\"\ + $CI_API_V4_URL/projects/$CI_PROJECT_ID/releases/$CI_COMMIT_TAG/assets/links") +else + eval $(echo -e "curl --header 'Content-Type: application/json' --header \ + \"PRIVATE-TOKEN: $CI_TOKEN\" --data '{ \"name\": \"$CI_COMMIT_TAG\", \ + \"tag_name\": \"$CI_COMMIT_TAG\", \"description\": \"auto_release\",\ + \"assets\": { \"links\": [{ \"name\": \ + \"$CI_PROJECT_NAME-$USER_DEFINE-$CI_COMMIT_TAG.zip\", \"url\": \ + \"$CI_PROJECT_URL/-/jobs/artifacts/$CI_COMMIT_TAG/download?job=$ARTIFACTS_JOB\"\ + }] } }' --request POST $CI_API_V4_URL/projects/$CI_PROJECT_ID/releases/") +fi \ No newline at end of file