zoukankan      html  css  js  c++  java
  • 10.6.3 执行构建

        此时,所有的预构建配置和依赖项安装都已完成。要执行构建,将要使用Travis的script属性。就像before_install属性一样,script属性也会接受一系列将被执行的命令。由于这些命令太过冗长,我选择将构建中的每个主要步骤封装到它自己的shell脚本中,并让Travis执行shell脚本。代码清单10-4展示了在构建中将要采用的主要步骤。
     
    代码清单10-4 执行构建
     
    script:   
    - sh travis_scripts/tag_build.sh   
    - sh travis_scripts/build_services.sh   
    - sh travis_scripts/deploy_to_docker_hub.sh   
    - sh travis_scripts/deploy_amazon_ecs.sh   
    - sh travis_scripts/trigger_platform_tests.sh
        让我们来看一下在脚本步骤中执行的每个主要步骤。
        
    10.6.4 标记源代码
    travis_scripts/tag_build.sh脚本负责使用构建名称标记代码库中的代码。对于这里的示例,我将通过GitHub REST API创建一个GitHub发布版本。一个GitHub发布版本不仅会标记源代码控制库,而且还会允许开发人员将版本注释等内容连同源代码是否为代码的预发布版本一起发布到GitHub网页上。
        因为GitHub发布API是一个基于REST的调用,所以将在shell脚本中使用curl来执行实际的调用。代码清单10-5展示了travis_scripts/tag_build.sh脚本中的代码。
        
    代码清单10-5 使用GitHub发布API标记第10章的代码存储库
    echo "Tagging build with $BUILD_NAME"
    export TARGET_URL="https://api.github.com/repos/linux2Java/spmia-chapter10/releases?access_token=$GITHUB_TOKEN"  ⇽---  GitHub发布API的目标端点
     
    body="{  ⇽---  REST调用的JSON体
      "tag_name": "$BUILD_NAME",
      "target_commitish": "master",
      "name": "$BUILD_NAME",
      "body": "Release of version $BUILD_NAME",
      "draft": true,
      "prerelease": true
    }"
     
    curl -k -X POST   ⇽---  使用curl来调用用于启动构建的服务
      -H "Content-Type: application/json"
      -d "$body"
      $TARGET_URL
      
    这个脚本非常简单。要做的第一件事就是为GitHub发布API构建目标URL:
     
    在TARGET_URL中,我们传递了一个名为access_token的HTTP查询参数。这个参数包含一个GitHub个人访问令牌,它特别被设置为允许脚本通过REST API执行操作。GitHub个人访问令牌存储在名为GITHUB_TOKEN的加密环境变量中。要生成个人访问令牌,可登录到GitHub账户并导航至https://github.com/settings/tokens。在生成令牌时,要确保将令牌剪切并立即粘贴出来。当我们离开GitHub界面时该令牌就会消失,需要重新生成它。
        
    脚本中的第二步是为REST调用创建JSON体:
        body="{   "tag_name": "$BUILD_NAME",   "target_commitish": "master",   "name": "$BUILD_NAME",   "body": "Release of version $BUILD_NAME",   "draft": true,   "prerelease": true }"
        在前面的代码片段中,我们提供$BUILD_NAME作为tag_name的值,并使用body字段设置基本的发布版本注释。
        一旦构建了调用的JSON体,通过curl命令执行这个调用就很简单了:
        curl –k -X POST -H "Content-Type: application/json"    -d "$body"    $TARGET_URL
        
    10.6.5 构建微服务并创建Docker镜像
        
    Travis脚本属性中的下一步是构建各个服务,然后为每个服务创建Docker容器镜像。可以通过一个名为travis_scripts/build_services.sh的小脚本来完成这一步骤。该脚本将执行以下命令:
        mvn clean package docker:build
        这个Maven命令为第10章代码存储库中的所有服务执行父Maven的spmia-chapter10-code/ pom.xml文件。父pom.xml为每个服务执行单独的Maven pom.xml,然后每个单独的服务都会构建服务源代码,执行所有单元测试和集成测试,然后将服务打包为可执行的jar文件。
        在Maven构建中发生的最后一件事情是创建一个Docker容器镜像,它将被推送到在Travis构建机器上运行的本地Docker存储库。Docker镜像的创建是使用Spotify Docker插件完成的。如果读者对构建过程中Spotify Docker插件的工作方式感兴趣,参见附录A。Maven构建过程和Docker配置在附录A中进行了说明。
        
    10.6.6 将镜像推送到DockerHub
        在构建的当前阶段,服务已经被编译和打包,并且在Travis构建机器上Docker容器镜像已经被创建。现在我们将通过travis_scripts/deploy_to_docker_hub.sh脚本将Docker容器镜像推送到中央Docker存储库。对于已创建的Docker镜像来说,Docker存储库就像Maven存储库一样。Docker镜像可以被标记并上传到Docker存储库中,其他项目可以下载和使用这些镜像。
        对于这个代码示例,我们将使用Docker Hub。代码清单10-6展示了在travis_scripts/ploy_to_docker_hub.sh脚本中使用的命令。
        
    代码清单10-6 将Docker镜像推送到Docker Hub
        
    echo "Pushing service docker images to docker hub ...." 
    docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD 
    docker push johncarnell/tmx-authentication-service:$BUILD_NAME 
    docker push johncarnell/tmx-licensing-service:$BUILD_NAME 
    docker push johncarnell/tmx-organization-service:$BUILD_NAME 
    docker push johncarnell/tmx-confsvr:$BUILD_NAME 
    docker push johncarnell/tmx-eurekasvr:$BUILD_NAME 
    docker push johncarnell/tmx-zuulsvr:$BUILD_NAME
        
    这个shell脚本的流程很简单。我们要做的第一件事就是使用Docker命令行工具和Docker Hub账户的用户凭据登录到Docker Hub,镜像将被推送到这个Docker Hub。记住,用于Docker Hub的凭据以加密环境变量的方式进行存储。
        docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD
        脚本登录后,代码会将各个微服务的Docker镜像推送到Docker Hub存储库,目前这些Docker镜像驻留在Travis构建服务器上运行的本地Docker存储库中。
        docker push johncarnell/tmx-confsvr:$BUILD_NAME
        上述命令告诉Docker命令行工具,将Docker Hub(这是Docker命令行工具使用的默认Hub)推送到johncarnell账户下。正在推送的镜像是tmx-confsvr镜像,其标记名称是$BUILD_NAME环境变量的值。
  • 相关阅读:
    《A First Course in Mathematical Modeling》-chaper1-差分方程建模
    《数学竞赛辅导》-一元函数积分学-7.24
    《University Calculus》-chape4-导数的应用-极值点的二阶导数检验法
    《A First Course in Probability》-chaper1-组合分析-方程整数解的个数
    《训练指南》——7.24
    《数学竞赛辅导》-一元函数微分学-7.23
    《University Calculus》-chape4-导数的应用-微分中值定理
    《训练指南》——7.21
    #424 Div2 E
    #424 Div2 C
  • 原文地址:https://www.cnblogs.com/mongotea/p/11975474.html
Copyright © 2011-2022 走看看