我一直在使用jenkins构建docker映像,并每次都使用最新标签将其推送到docker hub。 我写了一个ansible剧本,它将通过从docker hub提取最新映像来部署docker映像。现在的问题是,一旦ansible部署了具有相同标签的先前版本,新的最新映像还没有被ansible撤消。请检查一下剧本和让我知道我应该更新哪一部分以获得所需的工作。
剧本:
---
- hosts: flask04
tasks:
- name: Pull Flask app image
docker_image:
name: taybur/flaskapp_27032019
tag: latest
state: present
- name: remove flask app container
docker_container:
name: first_flaskapp
image: taybur/flaskapp_27032019
state: absent
- name: Create flask app container
docker_container:
name: first_flaskapp
image: taybur/flaskapp_27032019
ports:
- "5001:5001"
state: started
答案 0 :(得分:0)
通常,在安装之前,我会先删除旧映像,作为清理工作的一部分。 您应该首先删除图像,就像删除容器一样。这将迫使ansible拉出新版本的图片。
MyIncompleteMethod
self flag: #toImplement.
self notYetImplemented.`
答案 1 :(得分:0)
如果docker_image
模块已经存在,则不会自动拉该图像。您必须使用force: yes
参数来强制每次运行都拉动。
此外,docker_container
可以为您拉出不存在的图像。而且,您可以告诉他不要在每次运行(pull: true
)时停止,并在需要时重新启动容器。因此,在这种情况下,您可以将一组任务简化为一个任务:
- name: Create/Update the flask app container if needed
docker_container:
name: first_flaskapp
image: taybur/flaskapp_27032019
pull: true
ports:
- "5001:5001"
state: started
请参阅docker_container和docker_image的模块文档
进一步:
restart_policy: always
。pull
参数动态化,该变量将在命令行上用作额外的var: - name: Create/Update the flask app container if needed
docker_container:
name: first_flaskapp
image: taybur/flaskapp_27032019
pull: "{{ upgrade_flaskapp | default(false) | bool }}"
restart_policy: always
ports:
- "5001:5001"
state: started
现在,如果您正常运行剧本,它将:
如果您使用ansible-playbook -i <inventory> playbook.yml -e upgrade_flaskapp=true
进行跑步,
答案 2 :(得分:0)
理想情况下,我们应该使我们的任务/角色具有幂等性(如果重复运行,请跳过重复的工作)。因此,我认为用版本号标记您的构建并在部署中使用版本号而不是最新版本会更清洁。