创建基于代码部署的流水线

本文介绍在云效公有云版本中,如何创建可供BizWorks使用的基于代码部署的流水线。

使用场景

基于代码的流水线部署主要包括:首先将代码编译成JAR包,然后构建出镜像,最后部署到服务集群。

在使用云效流水线时,您会根据使用需求增加代码扫描单元测试人工卡点等节点,这都可能会导致云效流水线运行失败,所以云效流水线中的每个节点都需要配置Webhook,目的是在云效流水线运行异常时通知BizWorks同步更新应用的部署状态。

步骤一:配置环境变量

如果需要在BizWorks工作台调用云效流水线,您需要配置的环境变量,分别是:
  • BW_TENANT_ID
  • BW_USER_ID
  • BW_USER_NAME
  • BW_DOMAIN_NAME
  • BW_PROJECT_CODE
  • BW_APPLICATION_CODE
  • BW_DEPLOYMENT_CODE
  • BW_BUILD_MODULE_PATH
  • BW_BUILD_DOCKERFILE_PATH
  • BW_TARGET_IMAGE_URL
  • BW_TARGET_REGISTRY_USERNAME(需要指定默认值)
  • BW_TARGET_REGISTRY_PASSWORD(需要指定默认值)
  • BW_LOGIC_FLOW_SERVER
  • BW_AUTH_TOKEN
环境变量配置如下图所示:1

步骤二:配置代码源

代码源中的默认分支设置为master,云效流水线运行时的实际分支会由BizWorks传入。具体配置如下图所示:
说明 BizWorks应用和云效流水线是一一对应关系,即您在BizWorks控制台上为A应用配置的代码仓库地址,应该与A应用对应的云效流水线代码源保持一致。
1

步骤三:构建Java镜像

  1. 添加Java镜像构建节点。1
    Java镜像构建节点有两个任务:
    • Java构建任务:负责编译您在BizWorks上配置的Java应用分支。
    • 镜像构建并推送至自定义镜像仓库任务:负责构建出Java应用镜像、并推送至您在BizWorks上指定的仓库。
  2. 配置Java构建任务步骤,设置步骤名称JDK版本Maven版本构建命令,具体如下图所示:1
    构建命令的脚本样例如下:
    # maven build default command
    MVN_PLUGIN_PARAM="-DtenantId=${BW_TENANT_ID} -DprojectCode=¥¥${BW_PROJECT_CODE} -DapplicationCode=${BW_APPLICATION_CODE} -DlogicFlowServer=${BW_LOGIC_FLOW_SERVER}"
    mvn ${MVN_PLUGIN_PARAM} -s settings.xml -U clean package -Dmaven.test.skip=true -Dautoconfig.skip
    
    # module
    if [ -z ${BW_BUILD_MODULE_PATH} ];then
      MODULE_DIR=$(ls | grep -e "-start" )
    else
      MODULE_DIR=${BW_MODULE_PATH}
    fi
    if [ ! -d ${MODULE_DIR} ];then
        echo "---------------------------------------------------------------"
        echo "[${MODULE_DIR}]不存在,请检查Module名称是否正确。"
        exit 5
    fi
    echo "USER_MODULE_DIR=${MODULE_DIR}" >> .env
    
    # Jar
    JAR_PACKAGE=`ls ${MODULE_DIR}/target/ | egrep .jar$`
    echo "USER_JAR_PACKAGE=${JAR_PACKAGE}" >> .env
  3. 删除镜像构建并推送至阿里云镜像仓库个人版任务步骤
    说明 云效流水线执行时需要使用BizWorks上已配置好的仓库,所以Java镜像构建节点中默认的镜像构建并推送至阿里云镜像仓库个人版任务步骤不能使用,需要删除。
  4. 新增并配置 镜像构建并推送至自定义镜像仓库任务步骤1
    镜像构建并推送至自定义镜像仓库任务步骤的配置如下图所示:1

    相关参数的配置如下:

    • 镜像仓库地址${BW_TARGET_IMAGE_URL}
    • 用户名${BW_TARGET_REGISTRY_USERNAME}
    • 密码${BW_TARGET_REGISTRY_PASSWORD}
    • Dockerfile路径${BW_BUILD_DOCKERFILE_PATH}/Dockerfile
    • contextPath${USER_MODULE_DIR}/target
    • 构建参数JAR_PACKAGE = ${USER_JAR_PACKAGE}

步骤四:部署应用

  1. 添加应用部署节点。1
  2. 配置执行命令任务步骤1
    执行命令的脚本样例如下:
    # 部署实例
    result=$(curl -s "${BW_DOMAIN_NAME}/devBackend/v2/deployment/deployInstance" \
                  -H "Content-Type: application/json" \
                  -H "x-bw-us-auth-way: jwt" \
                  -H "Authorization: Bearer ${BW_AUTH_TOKEN}" \
                  -H "x-bw-tenant-id: ${BW_TENANT_ID}" \
                  -H "x-bw-user-id: ${BW_USER_ID}" \
                  -H "x-bw-user-name: ${BW_USER_NAME}" \
                  -X POST -d "{\"deploymentCode\": \"${BW_DEPLOYMENT_CODE}\"}")
    if [[ $(echo "${result}" | grep -c '"code":"OK"') = 0 ]] ; then
      echo "触发应用部署 [  失败  ] - ${result}"
      exit 1
    else
      echo "触发应用部署 [  成功  ]"
    fi
    
    # 检查实例状态
    while :; do
      sleep 5
      status=$(curl -s "${BW_DOMAIN_NAME}/devBackend/v2/deployment/getInstanceDeployStatusFromPipeline" \
                  -H "Content-Type: application/json" \
                  -H "x-bw-us-auth-way: jwt" \
                  -H "Authorization: Bearer ${BW_AUTH_TOKEN}" \
                  -H "x-bw-tenant-id: ${BW_TENANT_ID}" \
                  -H "x-bw-user-id: ${BW_USER_ID}" \
                  -H "x-bw-user-name: ${BW_USER_NAME}" \
                  -X POST -d "{\"deploymentCode\": \"${BW_DEPLOYMENT_CODE}\"}")
      # echo $result
      if [[ $(echo ${status} | grep '"code":"OK"' | grep 'Running' | wc -l) = 1 ]] ; then
        echo "检查部署状态 [ 部署中 ]"
      elif [[ $(echo ${status} | grep '"code":"OK"' | grep 'Cancelled' | wc -l) = 1 ]] ; then
        echo "检查部署状态 [  取消  ]"
        exit 1
      elif [[ $(echo ${status} | grep '"code":"OK"' | grep 'Failed' | wc -l) = 1 ]] ; then
        echo "检查部署状态 [  失败  ]"
        exit 1
      elif [[ $(echo ${status} | grep '"code":"OK"' | grep 'Succeeded' | wc -l) = 1 ]] ; then
        echo "检查部署状态 [  成功  ]"
        exit 0
      elif [[ $(echo ${status} | grep '"code":"OK"' | grep 'Abnormal' | wc -l) = 1 ]] ; then
        echo "检查部署状态 [  异常  ]"
        exit 1
      else
        echo "检查部署状态 [  失败  ]"
        exit 1
      fi
    done

步骤五:配置Webhook

为每个节点添加插件并配置Webhook,具体如下图所示:1
相关参数配置如下:
  • 插件类型选择为Webhook通知插件
  • 设置webhook地址,格式为${BizWorks控制台域名}/devBackend/v2/deployment/updateDeploymentStatusWebhook?x-bw-us-auth-way=jwt&access_token=${BW_AUTH_TOKEN}
  • 运行状态配置为失败取消