關於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 使用文檔

 

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