--- - hosts: all become: true vars: container_name: ansible-deploy-ci-test tasks: - name: Register previous container ID for possible fallback shell: "docker ps -q --filter name={{ container_name }}" register: prev - set_fact: prev_container_id="{{ prev.stdout }}" - name: Docker login docker_login: username: "{{ docker_user }}" password: "{{ docker_password }}" registry: "{{ docker_registry }}" - name: Pull app image docker_image: name: "{{ image_name }}" source: pull - name: Stop running container docker_container: name: "{{ container_name }}" image: "{{ image_name }}" state: stopped - name: Create app container docker_container: name: "{{ container_name }}" image: "{{ image_name }}" state: started ports: - "80:80" - name: Test app responds on port 80 uri: url: "http://{{ ansible_host }}:80" ignore_errors: True register: result - name: Rollback if app isn't responding docker_container: name: "{{ prev_container_id }}" state: started ports: - "80:80" when: result is failed