Files
michaelschiemer/.deployment-archive-20251030-111806/ansible/playbooks/deploy.yml

91 lines
2.8 KiB
YAML

---
- name: Deploy Framework Application to Production
hosts: production_server
become: no
vars:
git_repo_url: "{{ lookup('env', 'GIT_REPO_URL') | default('') }}"
build_timestamp: "{{ ansible_date_time.epoch }}"
tasks:
- name: Ensure git repo path exists
file:
path: "{{ git_repo_path }}"
state: directory
mode: '0755'
- name: Pull latest code from git
git:
repo: "{{ git_repo_url }}"
dest: "{{ git_repo_path }}"
version: main
force: yes
when: git_repo_url != ''
register: git_pull_result
- name: Build Docker image on production server
docker_image:
name: "{{ docker_registry }}/{{ docker_image_name }}"
tag: "{{ docker_image_tag }}"
build:
path: "{{ git_repo_path }}"
dockerfile: "{{ build_dockerfile }}"
args:
--target: "{{ build_target }}"
source: build
force_source: yes
push: no
register: build_result
- name: Tag image with timestamp for rollback capability
docker_image:
name: "{{ docker_registry }}/{{ docker_image_name }}"
repository: "{{ docker_registry }}/{{ docker_image_name }}"
tag: "{{ build_timestamp }}"
source: local
- name: Update Docker Swarm service - web
docker_swarm_service:
name: "{{ docker_swarm_stack_name }}_web"
image: "{{ docker_registry }}/{{ docker_image_name }}:{{ docker_image_tag }}"
force_update: yes
state: present
register: web_update_result
- name: Update Docker Swarm service - queue-worker
docker_swarm_service:
name: "{{ docker_swarm_stack_name }}_queue-worker"
image: "{{ docker_registry }}/{{ docker_image_name }}:{{ docker_image_tag }}"
force_update: yes
state: present
register: worker_update_result
- name: Wait for services to stabilize
pause:
seconds: 60
- name: Check service status
shell: docker stack services {{ docker_swarm_stack_name }} | grep -E "NAME|{{ docker_swarm_stack_name }}"
register: service_status
changed_when: false
- name: Display deployment results
debug:
msg:
- "Deployment completed successfully"
- "Build timestamp: {{ build_timestamp }}"
- "Image: {{ docker_registry }}/{{ docker_image_name }}:{{ docker_image_tag }}"
- "Services status: {{ service_status.stdout_lines }}"
- name: Test website availability
uri:
url: "https://michaelschiemer.de/"
validate_certs: no
status_code: [200, 302]
timeout: 10
register: website_health
ignore_errors: yes
- name: Display website health check
debug:
msg: "Website responded with status: {{ website_health.status | default('FAILED') }}"