Tu'u le ata o le Docker i le Dokku e fa'aaoga ai le Ansible

Tu'u le ata o le Docker i le Dokku e fa'aaoga ai le Ansible

Folasaga

Na ou aʻoaʻoina talu ai nei e uiga i se "taga" PaaS tutusa ma Heroku ma se igoa manino - Dokku. Sa ou matua tosina lava i le mafai ona faigofie ona faaopoopo se tusi faamaonia i le talosaga ma vhost mai le pusa, o lea na ou filifili ai e faʻafeiloaʻi aʻu ata faʻailoga i Dokku. E moni, sa ou le fiafia ona e leai ni poloaiga a Dokku e tutusa ma Heroku

dokku container:push
dokku container:release
// Очень было бы удобно, но еще нет :(

E iai le au tags lea e mafai ai ona e faʻapipiʻi ata, ae o le ata lava ia e tatau ona i ai i luga o le talimalo i le taimi nei. I se isi faaupuga, ina ia mafai ona taʻavale le ata faʻapitonuʻu na e faia, e tatau ona e kopi muamua i le talimalo.

tags:create <app> <tag>                        # Add tag to latest running app image
tags:deploy <app> <tag>                        # Deploy tagged app image
tags:destroy <app> <tag>                       # Remove app image tag

Ou te masani i le Ansible ma ua ou faia foʻi ni paipa faʻapipiʻi pito i tua, o lea na faigofie ai le filifiliga. Ioe, e mafai ona ou vaivai i ai ma tusi se plugin mo dokku, ae leai, e le o le taimi nei.

tusitaalo

O lenei tusitaalo e teu ai se ata i le lotoifale, kopi i le talimalo, toe faʻaleleia ma faʻapipiʻi i dokku. Faʻasalalau i le Gitlab repo. O loʻo tele pea le avanoa e faʻaleleia atili ai.

push-image.dokku.yml

push-image.dokku.yml

---
  - name: "DEPLOY APP '{{ appname }}' TO DOKKU"
    hosts: dokku_hosts
    remote_user: root
    gather_facts: false
    vars:
      tarname: "{{ appname }}__{{ image }}.tar"
      upload_dir: "/usr/local/src"
      upload_path: "{{ upload_dir }}/{{ tarname }}"
      apptag: "{{ upload_tag | default('latest') }}"
      dokku_image: "dokku/{{ appname }}:{{ apptag }}"

    tasks:
      - name: "Archive '{{ image }}' to upload"
        register: env
        delegate_to: localhost
        shell: 
          cmd: docker image save -o "./{{ tarname }}" {{ image }}

      - name: "Upload image '{{ image }}' to dokku at '{{ inventory_hostname }}'"
        register: upload
        copy:
          src: "./{{ tarname }}"
          dest: "{{ upload_path }}"

      - name: "Log - Upload result"
        debug:
          var: upload.dest

      - name: "Restore uploaded docker image"
        register: restore
        shell:
          cmd: docker image load -i "{{ upload_path }}"

      - name: "Log - Restore image"
        debug:
          var: restore.stdout_lines

      - name: "Retag image to '{{ dokku_image }}'"
        shell: 
          cmd: docker tag "{{ image }}" "{{ dokku_image }}"

      - name: "Create dokku tag for '{{ dokku_image }}'"
        shell: 
          cmd: dokku tags:create "{{ appname }}" "{{ apptag }}"

      - name: "Release '{{ appname }}'"
        register: release
        shell: 
          cmd: dokku tags:deploy "{{ appname }}" "{{ apptag }}"  

      - name: "Log - Release"
        debug:
          var: release.stdout_lines  

e manatu ua uma ona faʻapipiʻi ansible i luga o le masini i le lotoifale ma dokku i luga o le talimalo

Fa'aoga fa'apenei

ansible-playbook push-image.dokku.yml -i some_inventory -e "appname=DOKKU_APP_NAME image=DOCKER_IMAGE"

nisi_inventory

[dokku_hosts]
your.domain.example

puna: www.habr.com

Faaopoopo i ai se faamatalaga