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这一步出问题了。
或者在发布的EC2上输入:
tail -1000f /opt/codedeploy-agent/deployment-root/deployment-logs/codedeploy-agent-deployments.log
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描述文件中,加入:
${project.basedir}${file.separator}src${file.separator}main${file.separator}resources${file.separator}deployment
/deployment
777
appspec.yml
附:
1. maven-assembly-plugin 使用文档