Skip to content

Commit

Permalink
config(pipeline): setup CI/CD
Browse files Browse the repository at this point in the history
  • Loading branch information
quytranDF committed Sep 8, 2024
1 parent a2d5249 commit 9c8206b
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 49 deletions.
104 changes: 59 additions & 45 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,67 +10,79 @@ parameters:
enum: ['dev', 'prod']
default: 'dev'

executors:
node:
docker:
- image: cimg/node:16.16.0
orbs:
aws-cli: circleci/[email protected]

jobs:
build:
machine: true
machine:
image: ubuntu-2004:current
working_directory: ~/map-sorter-api
environment:
DOCKER_IMAGE: high10hunter/map-sorter-api
DOCKER_TAG: latest
steps:
- checkout
- restore_cache:
name: Restore NPM cache
keys:
- npm-cache-{{ checksum "package-lock.json" }}
- npm-cache-
- run:
name: Update NPM version
command: npm install -g npm@latest

- save_cache:
name: Save NPM cache
key: npm-cache-{{ checksum "package-lock.json" }}
paths:
- ~/.cache/npm
- ./node_modules
- run:
name: Install dependencies
command: npm ci
- run:
name: Run tests
command: npm run test
name: Login to DockerHub
command: echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin

- run:
name: Build
command: npm run build
name: Build and push image
command: |
echo "Building image"
docker build -t $DOCKER_IMAGE:$DOCKER_TAG .
echo "Pushing image"
docker push $DOCKER_IMAGE:$DOCKER_TAG
echo "::set-output name=image::$DOCKER_IMAGE:$DOCKER_TAG"
deploy:
executor: node
machine:
image: ubuntu-2004:current
working_directory: ~/map-sorter-api
steps:
- aws-cli/setup:
role-arn: 'arn:aws:iam::"$AWS_ACCOUNT_ID":role/circleci-oidc-provider-aws'
aws-region: $AWS_REGION
- checkout
- restore_cache:
name: Restore NPM cache
keys:
- npm-cache-{{ checksum "package-lock.json" }}
- npm-cache-

- add_ssh_keys:
fingerprints:
- 'SHA256:+2S1UpsWHcjQu4ur9jpqF16GQa9NrND9qbFNU6pzB64'

- run:
name: Create .env file
command: |
cd tools
aws ssm get-parameters-by-path --path "/dev" --with-decryption --recursive > mapsorter_env.json
./convert_ssm_params_to_dotenv.sh mapsorter_env.json
- run:
name: Sync .env file to dev server
command: |
scp -oStrictHostKeyChecking=no -r .env $SSH_USER@$SSH_HOST:~/map-sorter-api
- run:
name: Install dependencies
command: npm ci
- save_cache:
name: Save NPM cache
key: npm-cache-{{ checksum "package-lock.json" }}
paths:
- ~/.cache/npm
- ./node_modules
name: SSH into dev server
command: |
echo "SSH into dev server"
ssh -oStrictHostKeyChecking=no -v $SSH_USER@$SSH_HOST
- run:
name: Login to DockerHub
command: echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin

- run:
name: 'Deploy to << pipeline.parameters.build_stage >>'
name: 'Deploy to << pipeline.parameters.build_stage >> environment'
command: |
curl -i -H "X-Secret-Signature: $WEBHOOK_SECRET" \
-H "Content-Type: application/json" \
-X POST $WEBHOOK_URL/redeploy
echo "Deploying to << pipeline.parameters.build_stage >>"
docker pull $DOCKER_IMAGE:$DOCKER_TAG
docker container stop map-sorter-api || true
docker container rm map-sorter-api || true
docker run --log-opt max-size=10m --log-opt max-file=3 --log-opt compress=true --name map-sorter-api -d --env-file .env $DOCKER_IMAGE:$DOCKER_TAG
docker image prune --all -f
workflows:
version: 3
Expand All @@ -94,6 +106,7 @@ workflows:
jobs:
- build
- deploy:
context: aws
requires:
- build
filters:
Expand All @@ -110,6 +123,7 @@ workflows:
jobs:
- build
- deploy:
context: aws
requires:
- build
filters:
Expand Down
5 changes: 3 additions & 2 deletions .github/workflows/build-workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ name: Build
on:
pull_request:
types: [opened, synchronize]
branches: [develop]
# branches: [develop]
branches: [test]
jobs:
build:
runs-on: ubuntu-latest
Expand All @@ -14,5 +15,5 @@ jobs:
-X POST \
-H "Content-Type: application/json" \
-H "Circle-Token: ${{ secrets.CIRCLECI_TOKEN }}" \
--data '{"branch": "develop", "parameters": {"task": "build"}}' \
--data '{"branch": "test", "parameters": {"task": "build"}}' \
https://circleci.com/api/v2/project/gh/dscdut/map-sorter-api/pipeline
5 changes: 3 additions & 2 deletions .github/workflows/deploy-dev-workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ name: DeployDev
on:
pull_request:
types: [closed]
branches: [develop]
# branches: [develop]
branches: [test]

jobs:
deploy:
Expand All @@ -17,5 +18,5 @@ jobs:
-X POST \
-H "Content-Type: application/json" \
-H "Circle-Token: ${{ secrets.CIRCLECI_TOKEN }}" \
--data '{"branch": "develop", "parameters": {"task": "deploy", "build_stage": "dev"}}' \
--data '{"branch": "test", "parameters": {"task": "deploy", "build_stage": "dev"}}' \
https://circleci.com/api/v2/project/gh/dscdut/map-sorter-api/pipeline

0 comments on commit 9c8206b

Please sign in to comment.