Some checks failed
Ansible Minecraft CI/CD Pipeline / Ansible Lint Check (push) Successful in 58s
Ansible Minecraft CI/CD Pipeline / Project Structure Validation (push) Failing after 3s
Ansible Minecraft CI/CD Pipeline / Security Scan (push) Successful in 4s
Ansible Minecraft CI/CD Pipeline / Deploy to Staging (push) Has been skipped
Ansible Minecraft CI/CD Pipeline / Deploy to Production (push) Has been skipped
Ansible Minecraft CI/CD Pipeline / Backup System Check (push) Has been skipped
83 lines
2.7 KiB
YAML
83 lines
2.7 KiB
YAML
---
|
|
- name: Create version backup directory
|
|
ansible.builtin.file:
|
|
path: "{{ spigot_backup_dir }}"
|
|
state: directory
|
|
owner: "{{ minecraft_user }}"
|
|
group: "{{ minecraft_group }}"
|
|
mode: '0755'
|
|
|
|
- name: Stop Minecraft server
|
|
ansible.builtin.systemd:
|
|
name: minecraft
|
|
state: stopped
|
|
|
|
- name: Backup current version
|
|
ansible.builtin.shell: |
|
|
BACKUP_NAME="version_backup_$(date +%Y%m%d_%H%M%S)"
|
|
mkdir -p "{{ spigot_backup_dir }}/$BACKUP_NAME"
|
|
cp -r "{{ minecraft_server_dir }}"/* "{{ spigot_backup_dir }}/$BACKUP_NAME/"
|
|
become_user: "{{ minecraft_user }}"
|
|
|
|
- name: Copy world data to new version
|
|
ansible.builtin.shell: |
|
|
if [ -d "{{ minecraft_server_dir }}/world" ]; then
|
|
cp -r "{{ minecraft_server_dir }}/world" "{{ spigot_new_version_dir }}/"
|
|
fi
|
|
if [ -d "{{ minecraft_server_dir }}/world_nether" ]; then
|
|
cp -r "{{ minecraft_server_dir }}/world_nether" "{{ spigot_new_version_dir }}/"
|
|
fi
|
|
if [ -d "{{ minecraft_server_dir }}/world_the_end" ]; then
|
|
cp -r "{{ minecraft_server_dir }}/world_the_end" "{{ spigot_new_version_dir }}/"
|
|
fi
|
|
if [ -d "{{ minecraft_server_dir }}/plugins" ]; then
|
|
cp -r "{{ minecraft_server_dir }}/plugins" "{{ spigot_new_version_dir }}/"
|
|
fi
|
|
become_user: "{{ minecraft_user }}"
|
|
|
|
- name: Replace server directory with new version
|
|
ansible.builtin.shell: |
|
|
rm -rf "{{ minecraft_server_dir }}.old"
|
|
mv "{{ minecraft_server_dir }}" "{{ minecraft_server_dir }}.old"
|
|
mv "{{ spigot_new_version_dir }}" "{{ minecraft_server_dir }}"
|
|
become_user: "{{ minecraft_user }}"
|
|
|
|
- name: Update version file
|
|
ansible.builtin.copy:
|
|
content: "{{ minecraft_version }}"
|
|
dest: "{{ spigot_current_version_file }}"
|
|
owner: "{{ minecraft_user }}"
|
|
group: "{{ minecraft_group }}"
|
|
mode: '0644'
|
|
|
|
- name: Start Minecraft server with new version
|
|
ansible.builtin.systemd:
|
|
name: minecraft
|
|
state: started
|
|
notify: "restart minecraft after version change"
|
|
|
|
- name: Wait for server to start
|
|
ansible.builtin.wait_for:
|
|
port: "{{ minecraft_port }}"
|
|
delay: 30
|
|
timeout: 300
|
|
|
|
- name: Verify server is running new version
|
|
ansible.builtin.shell: |
|
|
sleep 10
|
|
/usr/local/bin/mcrcon -H 127.0.0.1 -P {{ rcon_port }} -p "{{ rcon_password }}" "version"
|
|
register: version_check
|
|
failed_when: false
|
|
|
|
- name: Display version switch result
|
|
ansible.builtin.debug:
|
|
msg:
|
|
- "Version switch completed successfully"
|
|
- "Server response: {{ version_check.stdout | default('No response') }}"
|
|
- "Old version backed up to: {{ minecraft_server_dir }}.old"
|
|
|
|
- name: Clean up old version after successful switch
|
|
ansible.builtin.file:
|
|
path: "{{ minecraft_server_dir }}.old"
|
|
state: absent
|
|
when: version_check.rc == 0 |