modified workflow #2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CD | |
on: | |
push: | |
branches: main | |
workflow_dispatch: | |
inputs: | |
version: | |
description: 'Image version' | |
required: true | |
env: | |
REGISTRY: ghcr.io | |
IMAGE_NAME: webapp_django | |
jobs: | |
build_and_push: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout the repo | |
uses: actions/checkout@v2 | |
- name: Create config directory and .env file | |
run: | | |
mkdir -p config | |
echo "DEBUG=False" >> config/.env | |
echo "SECRET_KEY=foo" >> config/.env | |
echo "DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1] *" >> config/.env | |
echo "SQL_ENGINE=django.db.backends.postgresql" >> config/.env | |
echo "POSTGRES_DB=${{ secrets.POSTGRES_DB }}" >> config/.env | |
echo "POSTGRES_USER=${{ secrets.POSTGRES_USER }}" >> config/.env | |
echo "POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }}" >> config/.env | |
echo "SQL_HOST=db" >> config/.env | |
echo "SQL_PORT=5432" >> config/.env | |
echo "DATABASE=postgres" >> config/.env | |
echo "DOMAIN=localhost" >> config/.env | |
working-directory: . | |
- name: Build Docker image using Docker Compose | |
run: docker-compose -f docker-compose.yml build | |
- name: verify that all the container have been built | |
run: docker images | |
- name: LOG IN to container registry | |
run: echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin | |
- name: set lower case owner name | |
run: | | |
echo "OWNER_LC=${OWNER,,}" >>${GITHUB_ENV} | |
env: | |
OWNER: '${{ github.repository_owner }}' | |
- name: Tag image | |
run: | | |
echo ${REGISTRY}/${OWNER_LC}/${IMAGE_NAME}:${{ github.run_number }} | |
docker tag ${IMAGE_NAME} ${REGISTRY}/${OWNER_LC}/${IMAGE_NAME}:latest | |
docker tag nginx_django ${REGISTRY}/${OWNER_LC}/nginx_django:latest | |
- name: Push image to GitHub Container Registry | |
run: | | |
echo ${REGISTRY}/${OWNER_LC}/${{ env.IMAGE_NAME }}:latest | |
docker push ${REGISTRY}/${OWNER_LC}/${{ env.IMAGE_NAME }}:latest | |
deploy: | |
runs-on: ubuntu-latest | |
needs: build_and_push | |
steps: | |
- name: Update & Upgrade Droplet, install docker | |
uses: appleboy/ssh-action@v0.1.3 | |
with: | |
host: ${{ secrets.HOST }} | |
username: ${{ secrets.USERNAME }} | |
key: ${{ secrets.DO_SSH_PRIVATE_KEY }} | |
script: | | |
# Add Docker's official GPG key: | |
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y | |
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg | |
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null | |
apt update -y | |
apt-cache policy docker-ce | |
sudo apt install docker-ce -y | |
apt upgrade -y | |
- name: set lower case owner name | |
run: | | |
echo "OWNER_LC=${OWNER,,}" >>${GITHUB_ENV} | |
env: | |
OWNER: '${{ github.actor }}' | |
- name: Deploy to Digital Ocean droplet via SSH action | |
uses: appleboy/ssh-action@v0.1.3 | |
with: | |
host: ${{ secrets.HOST }} | |
username: ${{ secrets.USERNAME }} | |
key: ${{ secrets.DO_SSH_PRIVATE_KEY }} | |
envs: IMAGE_NAME,REGISTRY,{{ secrets.GHCR_TOKEN }},OWNER_LC | |
script: | | |
echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin | |
docker ps | |
docker images | |
echo ${OWNER_LC} | |
docker stop ${REGISTRY}/${OWNER_LC}/${{ env.IMAGE_NAME }}:latest | |
docker rm ${REGISTRY}/${OWNER_LC}/${{ env.IMAGE_NAME }}:latest | |
docker pull ${REGISTRY}/${OWNER_LC}/${{ env.IMAGE_NAME }}:latest | |
docker images | |
docker run -d \ | |
--restart always \ | |
--name $(echo $IMAGE_NAME) \ | |
${REGISTRY}/${OWNER_LC}/${{ env.IMAGE_NAME }}:latest |