关于AWS Codedeploy的使用 小结

1. 首先,因为EC2上面需要安装到Codedeploy服务,可以参考这里:AWS Codedeploy安装与使用文档

    从文档可以知道,我们Codedeploy会帮我们发布应用到指定的EC2并且在发布前后都可以执行一些自定义的操作。详细见下面。AWS CodeDeploy涉及到很多东西,以下是对于AWS 的几个工具的一些使用小结。

2. 假设有一台EC2 Name (Tag)为 aws_ec2_test。在deploy之前,要先顺序执行几个操作。

 1) 先说说需要在这里创建一个application,如图:

 2) 创建deploy group,如图:

 

Deployment type选择 In-place,Environment configuration 选择Amazon EC2 instances。

输入 key : Name , Value : aws_ec2_test 。 (也就是你的EC2名称,能唯一标示就可以了,输入框自动补全)如图:

service role 指的是我们创建的IAM role,具体文档参考:IAM说明文档。Load Balancer 就不需要了。

 3) 假设创建了一个名为test的group。点击那个test。然后右上角有个create deployment就可以发布了。

 4)  然后,需要设置Revision location。这里就需要用到Jenkins Job打包上传到S3的zip包了。

3. 查看codedeploy结果:deployment history

假设Failed了,我们可以点进这个deploment,里面有详细的deployment信息,包括最重要的日志,如图:

里面可以看到,我们是在下载Jenkins打包的zip这一步出问题了。

 再点进去这个UnknownError就可以知道具体问题了。

或者在发布的EC2上输入:

 tail -1000f /opt/codedeploy-agent/deployment-root/deployment-logs/codedeploy-agent-deployments.log

 假设BeforeInstall failed了。查看到的日志如图:

4. 如上图,deploy app前后都可以执行一些脚本,BeforeInstall和AfterInstall,如图:

其实这些操作定义在程序yml文件(appspec.yml)。

version: 0.0
os: linux
files:
  - source: /
    destination: /app/jars/
hooks:
  BeforeInstall:
    - location: /deployment/before_install.sh
      timeout: 300
      runas: root
  AfterInstall:
    - location: /deployment/after_install.sh
      timeout: 300
      runas: root

当我们的zip从S3被deploy解压到指定的ec2后,yml描述文件在程序install之前执行before_install.sh,install之后执行after_install.sh。这两个shell脚本我们可以根据实际情况来自定义。另外,这里检测yml文件是否可用。

 

1) shell脚本的变量定义要注意=号两边不能有空格。如图:

2) 当deploy的时候遇到:ERROR: The overall deployment failed because too many individual instances failed deployment,进入上面说的查看log的地方看,链接中说的是yml文件错误。

3) 当deploy的时候遇到:Script at specified location: /deployment/before_install.sh run as user root failed with exit code 1。

参考:appspec.yml failed to call scripts ,也就是shell脚本没有权限被执行的问题。在maven打包zip包的package.xml描述文件中,加入:<fileMode>777</fileMode>。详细的可以看我Jenkins打包Zip这篇文章。

<fileSet>
	<directory>${project.basedir}${file.separator}src${file.separator}main${file.separator}resources${file.separator}deployment</directory>
	<outputDirectory>/deployment</outputDirectory>
	<fileMode>777</fileMode>
	<excludes>
		<exclude>appspec.yml</exclude>
	</excludes>
</fileSet>

 

附:

1. maven-assembly-plugin 使用文档

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章