All checks were successful
Deploy ASP.NET MVC to OCI / build-and-deploy (push) Successful in 15m36s
126 lines
4.3 KiB
YAML
126 lines
4.3 KiB
YAML
name: Deploy ASP.NET MVC to OCI
|
|
|
|
on:
|
|
push:
|
|
branches: [ main, master ]
|
|
pull_request:
|
|
branches: [ main, master ]
|
|
|
|
jobs:
|
|
build-and-deploy:
|
|
runs-on: localACDC
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v3
|
|
|
|
- name: Cache Docker layers
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: /tmp/.buildx-cache
|
|
key: ${{ runner.os }}-buildx-${{ github.sha }}
|
|
restore-keys: |
|
|
${{ runner.os }}-buildx-
|
|
|
|
- name: Debug - List files
|
|
run: |
|
|
echo "=== Arquivos na raiz ==="
|
|
ls -la
|
|
echo "=== Procurando Dockerfile ==="
|
|
find . -name "Dockerfile" -o -name "dockerfile" -type f
|
|
echo "=== Estrutura do projeto ==="
|
|
tree -L 3 || find . -type d -name "OnlyOneAccessTemplate"
|
|
|
|
- name: Build and push Docker image
|
|
uses: docker/build-push-action@v5
|
|
with:
|
|
context: .
|
|
file: ./Dockerfile
|
|
platforms: linux/arm64
|
|
push: true
|
|
tags: |
|
|
registry.redecarneir.us/onlyoneaccesstemplate:latest
|
|
registry.redecarneir.us/onlyoneaccesstemplate:${{ github.sha }}
|
|
cache-from: |
|
|
type=local,src=/tmp/.buildx-cache
|
|
type=registry,ref=registry.redecarneir.us/onlyoneaccesstemplate:cache
|
|
cache-to: |
|
|
type=local,dest=/tmp/.buildx-cache-new,mode=max
|
|
type=registry,ref=registry.redecarneir.us/onlyoneaccesstemplate:cache,mode=max
|
|
build-args: |
|
|
BUILDKIT_INLINE_CACHE=1
|
|
|
|
- name: Move cache
|
|
run: |
|
|
rm -rf /tmp/.buildx-cache
|
|
mv /tmp/.buildx-cache-new /tmp/.buildx-cache
|
|
|
|
- name: Deploy to OCI Server
|
|
uses: appleboy/ssh-action@v1.0.3
|
|
with:
|
|
host: 129.146.116.218
|
|
username: ${{ secrets.SSH_USERNAME }}
|
|
key: ${{ secrets.SSH_PRIVATE_KEY }}
|
|
port: 22
|
|
timeout: 60s
|
|
script: |
|
|
# Para qualquer container que esteja usando a porta 80
|
|
echo "=== Verificando containers na porta 80 ==="
|
|
CONTAINERS_PORT_80=$(docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}" | grep ':80->' | awk '{print $2}' || true)
|
|
if [ ! -z "$CONTAINERS_PORT_80" ]; then
|
|
echo "Parando containers na porta 80: $CONTAINERS_PORT_80"
|
|
echo "$CONTAINERS_PORT_80" | xargs -r docker stop
|
|
echo "$CONTAINERS_PORT_80" | xargs -r docker rm
|
|
else
|
|
echo "Nenhum container encontrado na porta 80"
|
|
fi
|
|
|
|
# Para o container anterior da aplicação (se existir)
|
|
docker stop onlyoneaccesstemplate || true
|
|
docker rm onlyoneaccesstemplate || true
|
|
|
|
# Remove imagem antiga
|
|
docker rmi registry.redecarneir.us/onlyoneaccesstemplate:latest || true
|
|
|
|
# Puxa nova imagem
|
|
docker pull registry.redecarneir.us/onlyoneaccesstemplate:latest
|
|
|
|
# Executa o novo container na porta 80
|
|
docker run -d \
|
|
--name onlyoneaccesstemplate \
|
|
--restart unless-stopped \
|
|
-p 80:8080 \
|
|
-p 443:8081 \
|
|
-e ASPNETCORE_ENVIRONMENT=Production \
|
|
-e ASPNETCORE_URLS="http://+:8080;https://+:8081" \
|
|
registry.redecarneir.us/onlyoneaccesstemplate:latest
|
|
|
|
# Limpa imagens não utilizadas
|
|
docker image prune -f
|
|
|
|
# Verifica se o container está rodando
|
|
docker ps | grep onlyoneaccesstemplate
|
|
|
|
# Testa se a aplicação está respondendo na porta 80
|
|
sleep 10
|
|
curl -f http://localhost:80 || echo "Aplicação pode estar inicializando..."
|
|
|
|
- name: Verify deployment
|
|
uses: appleboy/ssh-action@v1.0.3
|
|
with:
|
|
host: 129.146.116.218
|
|
username: ${{ secrets.SSH_USERNAME }}
|
|
key: ${{ secrets.SSH_PRIVATE_KEY }}
|
|
port: 22
|
|
script: |
|
|
echo "=== Status dos containers ==="
|
|
docker ps -a | grep onlyoneaccesstemplate
|
|
|
|
echo "=== Logs da aplicação (últimas 20 linhas) ==="
|
|
docker logs onlyoneaccesstemplate --tail 20
|
|
|
|
echo "=== Teste de conectividade ==="
|
|
curl -I http://localhost:80 || echo "Aplicação ainda não está acessível" |