- Update Gitea configuration (remove DEFAULT_ACTIONS_URL) - Fix deployment documentation - Update Ansible playbooks - Clean up deprecated files - Add new deployment scripts and templates
103 lines
3.4 KiB
YAML
103 lines
3.4 KiB
YAML
---
|
|
- name: Sync Code from Git Repository to Application Container
|
|
hosts: production
|
|
gather_facts: yes
|
|
become: no
|
|
|
|
vars:
|
|
# git_repository_url and git_branch are defined in group_vars/production.yml
|
|
# Can be overridden via -e flag if needed
|
|
git_repository_url: "{{ git_repo_url | default(git_repository_url_default) }}"
|
|
git_branch: "{{ git_branch | default(git_branch_default) }}"
|
|
|
|
pre_tasks:
|
|
- name: Optionally load secrets from vault
|
|
include_vars:
|
|
file: "{{ playbook_dir }}/../secrets/production.vault.yml"
|
|
no_log: yes
|
|
ignore_errors: yes
|
|
delegate_to: localhost
|
|
become: no
|
|
|
|
tasks:
|
|
- name: Verify application stack directory exists
|
|
stat:
|
|
path: "{{ app_stack_path }}"
|
|
register: app_stack_dir
|
|
|
|
- name: Fail if application stack directory doesn't exist
|
|
fail:
|
|
msg: "Application stack directory not found at {{ app_stack_path }}"
|
|
when: not app_stack_dir.stat.exists
|
|
|
|
- name: Check if docker-compose.yml exists
|
|
stat:
|
|
path: "{{ app_stack_path }}/docker-compose.yml"
|
|
register: compose_file_exists
|
|
|
|
- name: Fail if docker-compose.yml doesn't exist
|
|
fail:
|
|
msg: "docker-compose.yml not found. Run setup-infrastructure.yml first."
|
|
when: not compose_file_exists.stat.exists
|
|
|
|
- name: Read current .env file
|
|
slurp:
|
|
src: "{{ app_stack_path }}/.env"
|
|
register: env_file_content
|
|
failed_when: false
|
|
changed_when: false
|
|
|
|
- name: Check if Git configuration exists in .env
|
|
set_fact:
|
|
has_git_config: "{{ env_file_content.content | b64decode | regex_search('GIT_REPOSITORY_URL=') is not none }}"
|
|
when: env_file_content.content is defined
|
|
|
|
- name: Update .env with Git configuration
|
|
lineinfile:
|
|
path: "{{ app_stack_path }}/.env"
|
|
regexp: "{{ item.regex }}"
|
|
line: "{{ item.line }}"
|
|
state: present
|
|
loop:
|
|
- { regex: '^GIT_REPOSITORY_URL=', line: 'GIT_REPOSITORY_URL={{ git_repository_url }}' }
|
|
- { regex: '^GIT_BRANCH=', line: 'GIT_BRANCH={{ git_branch }}' }
|
|
- { regex: '^GIT_TOKEN=', line: 'GIT_TOKEN={{ git_token | default("") }}' }
|
|
- { regex: '^GIT_USERNAME=', line: 'GIT_USERNAME={{ git_username | default("") }}' }
|
|
- { regex: '^GIT_PASSWORD=', line: 'GIT_PASSWORD={{ git_password | default("") }}' }
|
|
when: not has_git_config | default(true)
|
|
|
|
- name: Restart application container to trigger Git pull
|
|
shell: |
|
|
cd {{ app_stack_path }}
|
|
docker compose restart app
|
|
args:
|
|
executable: /bin/bash
|
|
register: container_restart
|
|
|
|
- name: Wait for container to be ready
|
|
wait_for:
|
|
timeout: 60
|
|
when: container_restart.changed
|
|
|
|
- name: Check container logs for Git operations
|
|
shell: |
|
|
cd {{ app_stack_path }}
|
|
docker compose logs app --tail 50 | grep -E "(Git|Clone|Pull|✅|❌)" || echo "No Git-related logs found"
|
|
args:
|
|
executable: /bin/bash
|
|
register: git_logs
|
|
changed_when: false
|
|
|
|
- name: Display Git sync result
|
|
debug:
|
|
msg:
|
|
- "=== Code Sync Summary ==="
|
|
- "Repository: {{ git_repository_url }}"
|
|
- "Branch: {{ git_branch }}"
|
|
- "Container restarted: {{ 'Yes' if container_restart.changed else 'No' }}"
|
|
- ""
|
|
- "Git Logs:"
|
|
- "{{ git_logs.stdout }}"
|
|
- ""
|
|
- "Next: Check application logs to verify code was synced"
|