在Consul中注册所有服务后,我们可以在负载均衡器中运行consul-template,根据Consul中存储的服务数据动态填充上游列表。对于我们的NGINX负载均衡器,我们可以创建一个模板来填充’java-service-1’应用程序的后端:
# upstreams.conf
upstream java-service-1 {
{{range _, $element := service "java-service-1"}}
server ``.`Address`:``.`Port`;
`else`
server 127.0.0.1:65535; # force a 502`end` }
当给定服务的部署非常少时,此工作流就好了。但是,当某个服务处于“升级”状态(在部署者选择“完成升级”之前)时,在执行“完成升级”或是“回滚”操作之前,你都不能对它进行任何新的升级”。rancher-compose实用程序让我们可以选择以编程方式选择要执行的操作,以部署程序者的身份执行操作。例如,如果您对服务进行自动测试,则可以在rancher-compose升级返回后调用此类测试。根据这些测试的状态,rancher-compose可以被再次调用,这次我们告诉堆栈“完成升级”或“回滚”。我们部署Jenkins作业的一个原始示例可能如下:
# for the full job, see part 3 of this series
/usr/local/bin/rancher-compose --verbose \
-f ${docker_dir}/docker-compose.yml \
-r ${docker_dir}/rancher-compose.yml \
up -d --upgrade
JAVA_SERVICE_1_URL=http://java-service-1.stage.abc.net:8080/api/v1/status
if curl -s ${JAVA_SERVICE_1_URL} | grep -q "OK"; then
# looks good, confirm or "finish" the upgrade
/usr/local/bin/rancher-compose --verbose \
-f ${docker_dir}/docker-compose.yml \
-r ${docker_dir}/rancher-compose.yml \
up --confirm-upgrade
else
# looks like there's an error, rollback the containers
# to the previously deployed version
/usr/local/bin/rancher-compose --verbose \
-f ${docker_dir}/docker-compose.yml \
-r ${docker_dir}/rancher-compose.yml \
up --rollback
fi 这个逻辑将调用我们的应用程序端点来执行简单的状态检查。如果输出显示的是‘OK’,那么我们完成升级,否则我们需要回滚到以前部署的版本。如果您没有自动测试,另一个选择是简单地总是完成或“确认”升级。
# for the full job, see part 3 of this series
/usr/local/bin/rancher-compose --verbose \
-f ${docker_dir}/docker-compose.yml \
-r ${docker_dir}/rancher-compose.yml \
up -d --upgrade --confirm-upgrade