DEV Community

Cover image for Gitlab Pipeline With AWS Codedeploy
๐Ÿš€ Vu Dao ๐Ÿš€
๐Ÿš€ Vu Dao ๐Ÿš€

Posted on โ€ข Edited on

7 2

Gitlab Pipeline With AWS Codedeploy

Flow Chart

Alt Text

1. Create Codedeploy

  • Follow the link to create lambda function which is trigger by S3 notification event and then create code deployment.
  • Gitlab pipeline job will push deploy.zip to S3 so that lambda function will create code deployment for running install script on target instance by codedeploy-agent Alt Text

Alt Text

2. Gitlab pipeline jobs to build and deploy

Alt Text

  • image_version.txt is packed in deploy.zip for codedeploy get version to deploy
  • Codedeploy structure:
    • application: service_name (app, api, myweb, etc.)
    • deployment group: branch_name (feature, develop, hotfix, master, integration, etc.), each one will have same or different target instancce
  • .gitlab-ci.yml
    </li>
    </ul>
    
    <p>build:<br>
      stage: build<br>
      script:<br>
        - echo compile and package<br>
        - echo tag image version<br>
        - branch_name=$(echo $CI_COMMIT_REF_NAME | sed 's/\//-/g')<br>
        - version="$branch_name-$CI_PIPELINE_ID"<br>
        - echo login ECR and push image<br>
        - eval $(aws ecr get-login --no-include-email --region ap-northeast-1)<br>
        - docker tag app:latest myimage:${version}<br>
        - docker push myimage:${version}<br>
      only:<br>
        refs:<br>
          - feature<br>
          - develop<br>
          - integration<br>
          - hotfix<br>
          - master<br>
        changes:<br>
          - src/*<em>/</em><br>
      tags:<br>
        - build-runner</p>
    
    <p>deploy:<br>
      stage: deploy<br>
      script:<br>
        - echo "Deploy app"<br>
        - branch_name=$(echo $CI_COMMIT_REF_NAME | sed 's/\//-/g')<br>
        - version="$branch_name-$CI_PIPELINE_ID"<br>
        - echo $version &gt; codedeploy/image_version.txt<br>
        - cd codedeploy<br>
        - zip -r deploy.zip appspec.yml image_version.txt scripts<br>
        - aws s3 cp deploy.zip s3://codedeploy/automation/${CI_COMMIT_REF_NAME}/app/deploy.zip --metadata x-amz-meta-application-name=app,x-amz-meta-deploymentgroup-name=${obj}<br>
      only:<br>
        refs:<br>
          - feature<br>
          - develop<br>
          - integration<br>
          - hotfix<br>
          - master<br>
        changes:<br>
          - src/*<em>/</em><br>
      tags:<br>
        - deploy-runner</p>
    
    <p></p>
    <div class="highlight"><pre class="highlight plaintext"><code>
    ###**3. Install script**
    ![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/texdrp5op28irl7g35b2.png)
    - The script is run on target instance by codedeploy-agent [`install.sh`](https://github.com/vumdao/codedeploy/blob/master/cicd/codedeploy/scripts/install.sh)
    </code></pre></div>
    <p></p>
    
    <p>$ cat codedeploy/scripts/install.sh </p>
    <h1>
      <a name="binbash" href="#binbash">
      </a>
      !/bin/bash
    </h1>
    <h1>
      <a name="script-is-run-on-instance" href="#script-is-run-on-instance">
      </a>
      Script is run on instance
    </h1>
    <h1>
      <a name="get-app-version" href="#get-app-version">
      </a>
      Get app version
    </h1>
    
    <p>dir=$(dirname "$0")<br>
    version=$(cat ${dir}/../image_version.txt)</p>
    <h1>
      <a name="tracking-version" href="#tracking-version">
      </a>
      Tracking version
    </h1>
    
    <p>OPS_DIR="/ect/ops"<br>
    export APP_VERSION=${version}</p>
    <h1>
      <a name="compose-up" href="#compose-up">
      </a>
      Compose up
    </h1>
    
    <p>docker-compose up -d app</p>
    
    <p></p>
    <div class="highlight"><pre class="highlight plaintext"><code>
    ###**4. [`appspec.yml`](https://github.com/vumdao/codedeploy/blob/master/cicd/codedeploy/appspec.yml)**
    </code></pre></div>
    <p></p>
    
    <p>version: 0.0<br>
    os: linux<br>
    hooks:<br>
      BeforeInstall:<br>
        - location: scripts/install.sh<br>
          timeout: 300<br>
          runas: root</p>
    
    <p></p>
    <div class="highlight"><pre class="highlight plaintext"><code>
    ---
    
    &lt;h3 align="center"&gt;
      &lt;a href="https://dev.to/vumdao"&gt;:stars: Blog&lt;/a&gt;
      &lt;span&gt; ยท &lt;/span&gt;
      &lt;a href="https://github.com/vumdao/"&gt;Github&lt;/a&gt;
      &lt;span&gt; ยท &lt;/span&gt;
      &lt;a href="https://vumdao.hashnode.dev/"&gt;Web&lt;/a&gt;
      &lt;span&gt; ยท &lt;/span&gt;
      &lt;a href="https://www.linkedin.com/in/vu-dao-9280ab43/"&gt;Linkedin&lt;/a&gt;
      &lt;span&gt; ยท &lt;/span&gt;
      &lt;a href="https://www.linkedin.com/groups/12488649/"&gt;Group&lt;/a&gt;
      &lt;span&gt; ยท &lt;/span&gt;
      &lt;a href="https://www.facebook.com/CloudOpz-104917804863956"&gt;Page&lt;/a&gt;
      &lt;span&gt; ยท &lt;/span&gt;
      &lt;a href="https://twitter.com/VuDao81124667"&gt;Twitter :stars:&lt;/a&gt;
    &lt;/h3&gt;
    
    
    Ref: https://github.com/vumdao/codedeploy
    </code></pre></div>
    
    Enter fullscreen mode Exit fullscreen mode

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (1)

Collapse
 
tuannguyen91vn profile image
Blake (Tuan Nguyen) โ€ข

Very useful !

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

๐Ÿ‘‹ Kindness is contagious

Please leave a โค๏ธ or a friendly comment on this post if you found it helpful!

Okay