aws(学习笔记第二十课) codecommit以及codedeploy进行开发

aws(学习笔记第二十课)

  • 使用codecommit以及codedeploy进行开发

学习内容:

  • codecommitcodebuild以及codedeploy的整体概念
  • 使用codecommit
  • 使用codedeploy

1. 使用codecommit

  1. codecommitcodebuild以及codedeploy的整体概念
    • CICD的概念

      CI/CD 是指持续集成(Continuous Integration)和持续部署(Continuous Deployment)或持续交付(Continuous Delivery)。

      • 团队协同在github上共同维护代码,之后发布到Test Server上进行测试。
      • 如果通过了测试,那么就会发布到Prod Server,即生产环境。
    • 分支架构

      • 全体项目以master为核心分支进行开发。
      • 如果enhancement或者feature对应,那么就会从master分支checkout出来dev用的branch
      • 团队在特定的dev分支上进行开发,发布到Test环境进行测试。如果没有问题了,那么就会merge进入master分支,之后发布到Production生产环境。
      • 如果有紧急的需求,那么Dev Lead will commit an urgent customer disruptive change into master branch
    • code pipeline

      • AWS的环境
        • code管理使用Github或者Bitbucket
        • build使用jenkins
        • test使用jenkins
        • deploy使用jenkins或者other tooling
      • AWS的环境 这里AWS都采用自己的服务
        • code管理使用CodeCommit
        • build使用CodeBuild
        • test使用CodeBuild
        • deploy使用CodeDeploy
    • 开始构建codecommit

      • 进入codecommit
        在这里构建第一个codecommit repository
      • 来到IAM作成用户,设置codecommit的权限
        • 首先,定义策略,对于codecommit权限全部打开。
        • 之后,限定访问的repo为刚刚创建的demo-repo
      • 作成用户,赋予刚才定义的codecommit策略
        这里的用户名为demo-code-commit-user
      • 取得作成好的用户的 AWS CodeCommit 的 HTTPS Git 凭证

        选择下载https git凭证
    • 启动windowsec2,尝试push代码

      • windows ec2中安装git bash
    • 输入上面建立用户的credential凭证

      输入凭证,执行git clone

    • 创建代码文件,执行git命令

    • codecommit上确认代码文件

2. 使用codedeploy

  1. 全体架构

    这里,按照如下步骤启动codedeploy

    • 作成一个deploy destination ec2
    • 作成codecommitpush整个wordpressrepository,配置codedeploy
    • 启动codedeploy,配置wordpressec2
  2. 启动EC2作为deploy destination

    • 接下来的user data要执行codedeploy agent的安装,所以在这里要赋予ec2权限的role
      注意,这里不赋予足够的权限的话,就没有在接下来的步骤执行./install auto,进而不能按照codedeploy agent,导致codepipeline执行失败。

    • 用户数据设定

      shell 复制代码
      #!/bin/bash
      yum install ruby -y 
      aws s3 cp s3://aws-codedeploy-ap-northeast-2/latest/install . --region ap-northeast-1 
      chmod +x install
      ./install auto
  3. 启动另外一个EC2,作为模拟的开发主机

    • 对于开发主机,进行代码的初期化。

      shell 复制代码
      wget https://s3-us-west-2.amazonaws.com/us-west-2-aws-training/courses/spl-82/v1.4.5.prod-2bbeba30/scripts/WordPress-master.zip

      下载到/home/ec2-user/wordpress路径。

    • 进行解压缩unzip

      shell 复制代码
      unzip WordPress-master.zip -d /home/ec2-user/wordpress_codecommit
      cd /home/ec2-user/wordpress_codecommit
      mv WordPress-master/ wordpress
    • 为了wordpress工程的deploy,创建deploy用的scripts目录

      shell 复制代码
      mkdir -p /home/ec2-user/wordpress_codecommit/wordpress/scripts
    • 创建install_dependencies.sh

      shell 复制代码
      vi /home/ec2-user/wordpress_codecommit/wordpress/scripts/install_dependencies.sh
      #!/bin/bash
      yum install -y httpd wget php-fpm php-mysqli php-json php php-devel mariadb105-server
    • 创建start_serer.sh

      shell 复制代码
      vi /home/ec2-user/wordpress_codecommit/wordpress/scripts/start_server.sh
      #!/bin/bash
      systemctl start httpd
      systemctl enable httpd
      systemctl start mariadb
      systemctl enable mariadb
    • 创建stop_server.sh

      shell 复制代码
      vi /home/ec2-user/wordpress_codecommit/wordpress/scripts/stop_server.sh
      #!/bin/bash
      isExistApp=`pgrep httpd`
      if [[ -n $isExistApp ]]; then
       systemctl stop httpd
      fi
      isExistApp=`pgrep sql`
      if [[ -n $isExistApp ]]; then
       systemctl stop mariadb
      fi
    • 创建数据库脚本

      shell 复制代码
      vi /home/ec2-user/wordpress_codecommit/wordpress/scripts/create_test_db.sh
      #!/bin/bash
      mysql -uroot <<CREATE_TEST_DB
      CREATE DATABASE IF NOT EXISTS test;
      CREATE_TEST_DB
    • 创建 change_permissions.sh脚本

      shell 复制代码
      vi /home/ec2-user/wordpress_codecommit/wordpress/scripts/change_permissions.sh
      #!/bin/bash
      chmod -R 777 /var/www/html/WordPress
    • 这些shell文件的统一入口,就是codedeploy/appspec.yml

      shell 复制代码
      vi /home/ec2-user/wordpress_codecommit/wordpress/appspec.yml
      version: 0.0
      os: linux
      files:
       - source: /
         destination: /var/www/html/WordPress
      hooks:
       BeforeInstall:
        - location: scripts/install_dependencies.sh
          timeout: 300
          runas: root
       AfterInstall:
        - location: scripts/change_permissions.sh
          timeout: 300
          runas: root
       ApplicationStart:
        - location: scripts/start_server.sh
        - location: scripts/create_test_db.sh
          timeout: 300
          runas: root
       ApplicationStop:
       - location: scripts/stop_server.sh
         timeout: 300
         runas: root
    • 扩大权限给iam策略

      因为需要创建另外一个codecommit repository,所以以前指定权限要扩大到所有的repo

    • 创建wordpresscodecommit repository

    • 提前安装git 注意,使用sudo -i ,之后切换到ec2-user

      shell 复制代码
      yum install git
    • wordpress代码,appspec.ymlscript文件夹都git push到仓库中

      shell 复制代码
      git init
      git add .
      git commit -m "first version of wordpress
    • 这是本地repo已经commit完毕,执行git push到远端

      shell 复制代码
      git push https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/wordpress
    • 这时候会提示错误

    • 按照提示执行即可

      这里会提示输入密码和用户名,使用上面取得的凭证输入。

      shell 复制代码
       git push --set-upstream https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/wordpress master

      检查远端repo

  4. 创建codedeploy的应用程序

    • 这里需要一个codedeployrole,提前创建,名字指定为codedeploy-role

    • 接着创建codedeploy的应用程序

    • 创建部署组deploy group

      这里,部署role指定成上面创建的role

  5. 创建codepipeline进行真正的部署

    • 开始创建codepipeline

    • 创建一个新的role

    • 设定codecommit的源

    • 跳过codebuild设定

    • 最后创建codepipeline

    • 等待codepipeline的执行结果

    • 执行成功

    • 参照网上的wordpress的数据库步骤构建初始化DB
      wordpress的DB初始化

      这里省略接下来的步骤说明。

相关推荐
杂货铺的小掌柜几秒前
spring mvc源码学习笔记之五
学习·spring·mvc
m0_7493175232 分钟前
springboot优先级和ThreadLocal
java·开发语言·spring boot·后端·学习·spring
API_Zevin1 小时前
如何优化亚马逊广告以提高ROI?
大数据·开发语言·前端·后端·爬虫·python·学习
不是只有你能在乱世中成为大家的救世主1 小时前
学习第六十二行
c语言·c++·学习·gitee
工程师老罗1 小时前
我用AI学Android Jetpack Compose之Jetpack Compose学习路径篇
android·学习·android jetpack
玩具工匠1 小时前
字玩FontPlayer开发笔记3 性能优化 大量canvas渲染卡顿问题
前端·javascript·vue.js·笔记·elementui·typescript
14_112 小时前
Cherno C++学习笔记 P49 C++中使用静态库
c++·笔记·学习
studyForMokey2 小时前
【Android学习】Adapter中使用Context
android·学习·kotlin
StevenGerrad2 小时前
【读书笔记/源码】How Tomcat Works 笔记 - c1~c10
java·笔记·tomcat
Jackilina_Stone3 小时前
【HUAWEI】HCIP-AI-MindSpore Developer V1.0 | 第一章 神经网络基础( 1 人工神经网络 ) | 学习笔记
人工智能·神经网络·学习·hcip·huawei