Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AWS CodeDeploy AfterInstall script is being run from code-deploy agent dir

I'm trying to run AfterInstall script in AWS code deploy, but it is being run from the /opt/codedeploy-agent/ dir instead of my app directory.

This is how appspec.yml file looks like:

version: 0.0

os: linux

files:
  - source: /
    destination: /tmp/epub

hooks:
  AfterInstall:
    - location: server/install-packages.sh
      runas: root

As you can see it's a basic example.

Now, the bash script looks like this:

#!/bin/bash
npm install

I just want to npm install and that's it.

Unfortunately I'm getting the error:

LifecycleEvent - AfterInstall
Script - server/install-packages.sh
[stderr]npm ERR! install Couldn't read dependencies
[stderr]npm ERR! Linux 3.13.0-48-generic
[stderr]npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "install"
[stderr]npm ERR! node v4.2.1
[stderr]npm ERR! npm  v2.14.7
[stderr]npm ERR! path /opt/codedeploy-agent/package.json
[stderr]npm ERR! code ENOPACKAGEJSON
[stderr]npm ERR! errno -2
[stderr]npm ERR! syscall open
[stderr]
[stderr]npm ERR! package.json ENOENT: no such file or directory, open '/opt/codedeploy-agent/package.json'
[stderr]npm ERR! package.json This is most likely not a problem with npm itself.
[stderr]npm ERR! package.json npm can't find a package.json file in your current directory.
[stderr]
[stderr]npm ERR! Please include the following file with any support request:
[stderr]npm ERR!     /opt/codedeploy-agent/npm-debug.log

I was trying different appspec.yml configs like adding runas or adding "/" at the beginning of the location path. All the time it's trying to run from /opt/codedeoploy-agent/ directory.

In desperation, I've set absolute path to the script, but then I got :

Script does not exist at specified location: /tmp/epub/server/install-packages.sh

It's really annoying as I'm doing everything according to docs, but probably I'm missing something very very small !

Thanks

like image 948
matewilk Avatar asked Oct 23 '15 21:10

matewilk


People also ask

What user does CodeDeploy run as?

The CodeDeploy agent default user is root . The directory listing below shows the ownership of the deployed files in their destination folder, /tmp , after a successful deployment.

What is the need to run a CodeDeploy agent on an AWS EC2?

The CodeDeploy agent is required only if you deploy to an EC2/On-Premises compute platform. The agent is not required for deployments that use the Amazon ECS or AWS Lambda compute platform. A configuration file is placed on the instance when the agent is installed. This file is used to specify how the agent works.

Where can deployment happens using CodeDeploy?

CodeDeploy can deploy application content that runs on a server and is stored in Amazon S3 buckets, GitHub repositories, or Bitbucket repositories.


1 Answers

Ok,

So I've found out, that codedeoloy-agent is running AfterInstall (and probably all the other steps) from the temporary directory created by the agent on deploy instance, so in my case I had to modify the bash script by cd-ing to the proper directory:

#!/bin/bash
cd /tmp/epub/server/
npm install
like image 200
matewilk Avatar answered Oct 24 '22 14:10

matewilk