feat: CI/CD pipeline setup complete - Ansible playbooks updated, secrets configured, workflow ready
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
---
|
||||
- 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') }}"
|
||||
Reference in New Issue
Block a user