Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

k8s cicd - develop #5519

Merged
merged 13 commits into from
Oct 25, 2023
288 changes: 121 additions & 167 deletions .github/workflows/deploy-pm4.yml
Original file line number Diff line number Diff line change
@@ -1,209 +1,163 @@
name: BUILD-PM4
name: deploy-k8s
run-name: ${{ github.actor }} send deploy EKS 🚀
on:
#push:
# branches:
# - kr-github-actions
pull_request:
types: [opened, reopened, synchronize, edited, closed]
schedule:
- cron: '30 2 * * *' # every day at midnight
#workflow_dispatch:
#pull_request:
# branches:
# - main
- cron: '30 2 * * *' # every day at midnight
workflow_dispatch:
workflow_call:
env:
SHA: ${{github.event.pull_request.head.sha}}
PROJECT: ${{github.event.pull_request.head.repo.name}}
CI_PR_BODY: ${{ github.event_name == 'schedule' && 'ci:deploy' || github.event.pull_request.body }}
PACKAGE_URL: ${{github.event.pull_request.head.repo.ssh_url}}
PACKAGE_BRANCH: ${{github.event.pull_request.head.ref}}
#MY_GITHUB_TOKEN: ${{ secrets.GH_STATUS_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GIT_TOKEN }}
#GIT_TOKEN: ${{ secrets.MY_GH_TOKEN }}
OWNER: ${{ github.event.pull_request.head.repo.owner.login }}
#Other Parameters
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
aws-url: ${{ secrets.AWS_URL }}
STM_TOKEN: ${{ secrets.STM_TOKEN }}
CI_PACKAGE_BRANCH: ${{github.event.pull_request.head.ref || 'develop' }}
CI_PROJECT: ${{github.event.pull_request.head.repo.name || 'processmaker' }}
CI_TEST: $CI_PROJECT
IMAGE_TAG1: $(echo "$CI_PROJECT-$CI_PACKAGE_BRANCH" | sed "s;/;-;g")
GITHUB_COMMENT: ${{ secrets.GH_COMMENT }}
AWS_URL: ${{ secrets.AWS_URL }}
pull_req_id: ${{github.event.pull_request.number}}
BASE: ${{ contains(github.event.pull_request.body, 'ci:next') && 'ci-base-php82' || 'ci-base' }}
DATE: $(date -d '-1 day' '+%Y-%m-%d'|sed 's/-//g')
CURRENT_DATE: $(date '+%Y-%m-%d %H:%M:%S'|sed 's/-//g')
CI_PACKAGE_BRANCH: ${{github.event.pull_request.head.ref || 'next' }}
CI_PROJECT: ${{github.event.pull_request.head.repo.name || 'processmaker' }}
CI_PR_BODY: ${{ github.event_name == 'schedule' && 'No ci tags needed here' || github.event.pull_request.body }}
IMAGE_TAG: $(echo "$CI_PROJECT-$CI_PACKAGE_BRANCH" | sed "s;/;-;g")
DEPLOY: ${{ secrets.DEPLOY }}
GH_USER: ${{ secrets.GH_USER }}
GH_EMAIL: ${{ secrets.GH_EMAIL }}
GITHUB_COMMENT: ${{ secrets.GH_COMMENT }}
DOM_EKS: ${{ secrets.DOM_EKS }}
BASE: ${{ contains(github.event.pull_request.body, 'ci:next') && 'ci-base' || 'ci-base-php81' }}
GITHUB_TOKEN: ${{ secrets.GIT_TOKEN }}
BUILD_BASE: ${{ (contains(github.event.pull_request.body, 'ci:build-base') || github.event_name == 'schedule') && '1' || '0' }}
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
job1:
name: build-stm-image
if: github.event.action != 'closed'
runs-on: ${{ vars.RUNNER }}
steps:
- name: Export Params
run: |
echo "Env Check: CI_PROJECT: $CI_PROJECT CI_PACKAGE_BRANCH: $CI_PACKAGE_BRANCH CI_PR_BODY: $CI_PR_BODY"
echo "REPOSITORY=${{env.aws-url}}/enterprise" >> $GITHUB_ENV
echo "TAG=${{env.IMAGE_TAG1}}" >> $GITHUB_ENV
echo "IMAGE=${{env.aws-url}}/enterprise:${{env.IMAGE_TAG1}}" >> $GITHUB_ENV
#Additional
echo "CACHEBUSTER="$(date +%s) >> $GITHUB_ENV
- name: Clone Repo STM
run: |
git clone --depth 1 -b cicd "https://[email protected]/ProcessMaker/pm4-stm-docker.git" pm4-stm-docker
imageEKS:
name: build-docker-image-EKS
runs-on: ubuntu-22.04
steps:
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ env.aws-access-key-id }}
aws-secret-access-key: ${{ env.aws-secret-access-key }}
aws-region: ${{ env.aws-region }}
- name: Login to ECR
run: |
aws ecr get-login-password | docker login --username AWS --password-stdin ${{env.aws-url}}
- name: Build and Push the base images
if: contains(github.event.pull_request.body, 'ci:build-base') || github.event_name == 'schedule'
run: |
cd pm4-stm-docker
docker-compose build --no-cache base
docker-compose build --no-cache cache
docker push ${REPOSITORY}:ci-base
docker push ${REPOSITORY}:ci-cache
- name: Build and Push the image to ECR
aws ecr get-login-password | docker login --username AWS --password-stdin ${{env.AWS_URL}}
- name: Clone repo K8S
run: |
cd pm4-stm-docker
docker-compose build processmaker
docker push ${IMAGE}
job2:
name: deploy-stm
if: github.event.action != 'closed'
needs: job1
runs-on: ${{ vars.RUNNER }}
container:
image: cimg/php:7.4
options: --user root
steps:
- name: Export Params
git clone --depth 1 -b cicd2 "https://[email protected]/ProcessMaker/pm4-k8s-distribution.git" pm4-k8s-distribution
git clone --depth 1 "https://[email protected]/ProcessMaker/pm4-tools.git" pm4-k8s-distribution/images/pm4-tools
- name: Generate image EKS
run: |
echo "Env Check: CI_PROJECT: $CI_PROJECT CI_PACKAGE_BRANCH: $CI_PACKAGE_BRANCH CI_PR_BODY: $CI_PR_BODY"
echo "REPOSITORY=${{env.aws-url}}/enterprise" >> $GITHUB_ENV
echo "TAG=${{env.IMAGE_TAG1}}" >> $GITHUB_ENV
echo "IMAGE_TAG=${{env.IMAGE_TAG1}}" >> $GITHUB_ENV
echo "IMAGE=${{env.aws-url}}/enterprise:${{env.IMAGE_TAG1}}" >> $GITHUB_ENV
echo "STM_TOKEN=${{env.STM_TOKEN}}" >> $GITHUB_ENV
- name: Clone Repo STM
cd pm4-k8s-distribution/images
export CICD=1
bash build.k8s.sh $CI_PACKAGE_BRANCH ${{env.IMAGE_TAG}} $BASE
- name: List Images
run: |
git clone --depth 1 -b cicd "https://[email protected]/ProcessMaker/pm4-stm-docker.git" pm4-stm-docker
cd pm4-stm-docker
docker images
- name: Push Base to ECR
if: env.BUILD_BASE == '1'
run: |
docker push ${{env.AWS_URL}}/processmaker:ci-base-php81
docker push ${{env.AWS_URL}}/processmaker:ci-base
- name: Push Enterprise Image to ECR
run: |
docker push ${{env.AWS_URL}}/processmaker:${{env.IMAGE_TAG}}
phpunit:
name: phpunit
needs: imageEKS
runs-on: ubuntu-22.04
if: github.event.action != 'closed'
steps:
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ env.aws-access-key-id }}
aws-secret-access-key: ${{ env.aws-secret-access-key }}
aws-region: ${{ env.aws-region }}
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
- name: Deploy STM
id: stm
- name: Login to ECR
run: |
mkdir -p /tmp/workspace
cd pm4-stm-docker/deploy-stm
composer install --no-dev
php run.php
if [ -f "url.txt" ]; then
INSTANCE_URL=$(cat url.txt)
aws ecr get-login-password | docker login --username AWS --password-stdin ${{env.AWS_URL}}
- name: Run PHPUnit
run: |
git clone --depth 1 "https://[email protected]/ProcessMaker/pm4-tools.git"
cd pm4-tools
export IMAGE=${{env.AWS_URL}}/processmaker:${{env.IMAGE_TAG}}
docker pull $IMAGE
docker-compose down -v
docker-compose build phpunit
docker-compose run phpunit

deployEKS:
name: build-deploy-EKS
if: contains(github.event.pull_request.body, 'ci:deploy')
needs: imageEKS
runs-on: ubuntu-22.04
steps:
- name: Clone private repository
run: |
git clone --depth 1 -b main "https://[email protected]/ProcessMaker/argocd.git" argocd
cd argocd
- run: git config --global user.email $GH_EMAIL
- run: git config --global user.name $GH_USER
- name: Install pm4-tools
run: |
git clone --depth 1 "https://[email protected]/ProcessMaker/pm4-tools.git"
cd pm4-tools
composer install --no-interaction
cd ..
- name: Add instance EKS
run: |
cd argocd
deploy=$(echo -n ${{env.IMAGE_TAG}} | md5sum | head -c 10)
current_datetime=$(echo -n ${{env.CURRENT_DATE}} | md5sum | head -c 10)
if ! echo $(ls ci/) | grep $deploy; then
echo "Creating Deploy :: $deploy"
cp template-argocd.yaml ci/ci-$deploy.yaml
cp template-db.yaml ./ci/job_database.yaml
sed -i "s/{{instance}}/ci-$deploy/" ./ci/ci-$deploy.yaml
sed -i "s/{{image}}/${{env.IMAGE_TAG}}/" ./ci/ci-$deploy.yaml
sed -i "s/{{instance}}/ci-$deploy/" ./ci/job_database.yaml
git status
git add .
git commit -m "Deploy CICD : ci-$deploy"
git push origin main
else
echo "Bouncing"
rm -rf ci/job_bounce_develop.yaml
cp template-bounce.yaml ci/job_bounce_develop.yaml
sed -i "s/{{instance}}/ci-$deploy/g" ./ci/job_bounce_develop.yaml
sed -i "s/{{current_datetime}}/$current_datetime/g" ./ci/job_bounce_develop.yaml
git status
git add .
git commit -m "BOUNCE CICD : ci-$deploy"
git push origin main
echo "Exist Deploy :: https://ci-$deploy$DOM_EKS"
fi
echo "Instance URL: '${INSTANCE_URL}'"
export INSTANCE_URL=https://ci-$deploy$DOM_EKS
echo "INSTANCE_URL=${INSTANCE_URL}" >> "$GITHUB_ENV"
- name: Publish the URL to the Github PR
if: success() || steps.stm.conclusion == 'success'
../pm4-tools/pm wait-for-instance-ready
- name: Comment Instance
run: |
cd pm4-stm-docker
echo "Instance URL: '${INSTANCE_URL}'"
bash ./github_comment.sh "$PROJECT" "$pull_req_id"
job3:
name: run-phpunit
if: github.event.action != 'closed'
needs: job1
runs-on: ${{ vars.RUNNER }}
steps:
- name: Export Params
run: |
echo "REPOSITORY=${{env.aws-url}}/enterprise" >> $GITHUB_ENV
echo "TAG=${{env.IMAGE_TAG1}}" >> $GITHUB_ENV
echo "IMAGE=${{env.aws-url}}/enterprise:${{env.IMAGE_TAG1}}" >> $GITHUB_ENV
- name: Clone Repo STM
run: |
git clone --depth 1 -b cicd "https://[email protected]/ProcessMaker/pm4-stm-docker.git" pm4-stm-docker
cd pm4-stm-docker
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ env.aws-access-key-id }}
aws-secret-access-key: ${{ env.aws-secret-access-key }}
aws-region: ${{ env.aws-region }}
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
- name: PHPUnits
run: |
cd pm4-stm-docker
docker pull $IMAGE
docker-compose down -v
docker-compose build phpunit
docker-compose run phpunit
#job4:
# name: run-benchmarks
# needs: job2
# runs-on: ${{ vars.RUNNER }}
# steps:
# - name: my-step
# run: |
# echo "Fifth Step"
#job5:
# name: run-cypress
# needs: job2
# runs-on: ${{ vars.RUNNER }}
# steps:
# - name: my-step
# run: |
# echo "fourth Step"
#job6:
# name: run-cypress-qa
# needs: job2
# runs-on: ${{ vars.RUNNER }}
# steps:
# - name: my-step
# run: |
# echo "Sixt Step"
job7:
bash argocd/gh_comment.sh "$CI_PROJECT" "$pull_req_id"
deleteEKS:
name: Delete Instance
if: github.event.action == 'closed'
runs-on: ${{ vars.RUNNER }}
container:
image: cimg/php:7.4
options: --user root
runs-on: ubuntu-22.04
steps:
- name: Export Params
run: |
echo "REPOSITORY=${{env.aws-url}}/enterprise" >> $GITHUB_ENV
echo "TAG=${{env.IMAGE_TAG1}}" >> $GITHUB_ENV
echo "IMAGE_TAG=${{env.IMAGE_TAG1}}" >> $GITHUB_ENV
echo "IMAGE=${{env.aws-url}}/enterprise:${{env.IMAGE_TAG1}}" >> $GITHUB_ENV
echo "STM_TOKEN=${{env.STM_TOKEN}}" >> $GITHUB_ENV
- name: Clone Repo STM
- name: Clone private repository
run: |
git clone --depth 1 -b cicd "https://[email protected]/ProcessMaker/pm4-stm-docker.git" pm4-stm-docker
cd pm4-stm-docker
- name: Delete Instance STM
git clone --depth 1 -b main "https://[email protected]/ProcessMaker/argocd.git" argocd
- run: git config --global user.email $GH_EMAIL
- run: git config --global user.name $GH_USER
- name: Remove instance EKS
run: |
mkdir -p /tmp/workspace
cd pm4-stm-docker/deploy-stm
composer install --no-dev
php run-delete-instance.php

cd argocd/ci/
deploy=$(echo -n ${{env.IMAGE_TAG}} | md5sum | head -c 10)
rm -rf ci-$deploy.yaml
git status
git add .
git commit -m "Delete Instance : ci-$deploy"
git push origin main
1 change: 0 additions & 1 deletion phpunit.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
<env name="APP_DEBUG" value="true" />
<env name="APP_ENV" value="testing" />
<env name="APP_URL" value="http://localhost" />
<env name="APP_KEY" value="base64:x80I9vQNxwllSuwBkTwfUa5qkgPTRdwqHCPSz7zHi1U=" />
<env name="TESTING_VERBOSE" value="false" />
<env name="POPULATE_DATABASE" value="true" />
<env name="TELESCOPE_ENABLED" value="false" />
Expand Down
Loading