有一個需求,每次服務更新發布時,要拉取不同版本的 Docker 鏡像來啓動,這裏就涉及到一個問題:如何傳遞 Docker 鏡像版本號的問題。
線上環境是用 saltstack 發佈的,問題就變成了:如何從命令行傳遞參數到 state sls 文件中的變量。
可以從命令行傳遞 pillar 變量解決。
示例如下:
1、startup.sh 腳本中定義 jinja 變量 {{ version }}
,用以區分不同版本的 Docker 鏡像
// startup.sh 文件 #!/bin/bash docker pull harbor.foobar.cn/prod/web-service:{{ version }} && \ docker run -d --name web-service harbor.foobar.cn/prod/web-service:{{ version }}
2、deploy.sls 文件裏聲明 startup.sh 使用 jinjia 模板 - template: jinja
,並且傳遞 version 變量到 startup.sh 文件,version 變量 version: {{ salt['pillar.get']('version') }}
獲取從命令行傳遞的 pillar 參數變量
// deploy.sls 文件app-script-file: file.managed: - name: /data/apps/startup.sh - source: salt://releases//files/startup.sh - mode: 755 - user: root - group: root - makedirs: True - template: jinja - defaults: version: {{ salt['pillar.get']('version') }}
3、調用 salt state sls 文件時,通過在命令行傳遞參數 pillar='{version: 版本號}'
就可以實現更新發布時, 拉取不同版本的 Docker 鏡像來啓動
salt '*' state.apply deploy pillar='{version: 1.1.0}'
本文出自鏈接:https://www.jianshu.com/p/771ed60c985c