<>
場景簡介
當(dāng)某一任務(wù)需對多個(gè)實(shí)例進(jìn)行云助手操作命令,而且需查看在部分實(shí)例上由云助手發(fā)布的內(nèi)容與已存在的內(nèi)容是否會引起沖突,若無沖突則余下實(shí)例可以全部執(zhí)行此任務(wù)。由上述內(nèi)容可以通過Tag的方式查找需要操作的實(shí)例,并使用OOS云助手來實(shí)現(xiàn)自動(dòng)化部署,設(shè)置分批執(zhí)行來解決驗(yàn)證發(fā)布內(nèi)容在部分實(shí)例的運(yùn)行情況。
<>
解決方案
任務(wù)分解:
1.通過tagKey-tagValue來查找需要操作的實(shí)例
2.設(shè)置執(zhí)行的批次
3.循環(huán)批次內(nèi)的實(shí)例執(zhí)行云助手命令
4.執(zhí)行所有批次
一、打開控制臺 <https://ecs.console.aliyun.com/#/home>,找到運(yùn)維編排
二、創(chuàng)建模版
根據(jù)以上的任務(wù)步驟來看可以把此任務(wù)創(chuàng)建成以下模版。點(diǎn)擊創(chuàng)建模版
或在公共模版中查找此模版ACS-ECS-BulkyRunCommandByTag
模版內(nèi)容如下
FormatVersion: OOS-2019-06-01 Description: Run command on ECS instances by
specifying tag. Parameters: commandContent: Description: Command content to run
in ECS instance. Type: String tagKey: Description: The tag key for query ECS
instances. Type: String MinLength: 1 MaxLength: 30 tagValue: Description: The
tag value for query ECS instances. Type: String MinLength: 1 MaxLength: 30
commandType: Description: The type of command. Type: String AllowedValues: -
RunBatScript - RunPowerShellScript - RunShellScript batchNumber: Type: Number
Description: The number of times of wholesale distribution. MinValue: 1
MaxValue: 10 Default: 5 maxErrors: Description: The maximum number of errors
allowed during task execution. Type: Number Default: 0 OOSAssumeRole:
Description: The RAM role to be assumed by OOS. Type: String Default:
OOSServiceRole RamRole: '{{ OOSAssumeRole }}' Tasks: - Name:
describeRunningInstancesByTag Action: 'ACS::ExecuteAPI' Description: Views the
ECS instances by specifying tag. Properties: Service: ECS API:
DescribeInstances Parameters: Status: Running Tags: - Key: '{{ tagKey }}'
Value: '{{ tagValue }}' Outputs: instanceIds: Type: List ValueSelector:
'Instances.Instance[].InstanceId' - Name: runCommand Action:
'ACS::ECS::RunCommand' Description: Invokes ECS instance command. Properties:
commandContent: '{{ commandContent }}' instanceId: '{{ ACS::TaskLoopItem }}'
commandType: '{{ commandType }}' Loop: MaxErrors: '{{ maxErrors }}' Items: '{{
describeRunningInstancesByTag.instanceIds }}' Concurrency:
'Fn::CalculateBatch': - '{{ batchNumber }}' - '{{
describeRunningInstancesByTag.instanceIds }}' Outputs: commandOutputs:
AggregateType: 'Fn::ListJoin' AggregateField: commandOutput Outputs:
commandOutput: Type: String ValueSelector: invocationOutput Outputs:
commandOutputs: Type: List Value: '{{ runCommand.commandOutputs }}'
三、創(chuàng)建執(zhí)行
查找到此模版后,點(diǎn)擊創(chuàng)建執(zhí)行。
四、選擇分批執(zhí)行方式,點(diǎn)擊下一步:設(shè)置參數(shù)
根據(jù)實(shí)際需要選擇分批執(zhí)行的方式
1、自動(dòng)并發(fā)
循環(huán)并發(fā)控制為自動(dòng)并發(fā)時(shí),不需要任務(wù)執(zhí)行者來管理任務(wù)是否需要繼續(xù)執(zhí)行。系統(tǒng)會自動(dòng)執(zhí)行此任務(wù)下的所有批次。
2、第一批暫停
循環(huán)并發(fā)控制為第一批暫停時(shí),當(dāng)把任務(wù)分為N個(gè)批次后,當(dāng)?shù)谝粋€(gè)批次執(zhí)行結(jié)束后,此時(shí)任務(wù)會進(jìn)入暫停狀態(tài),等待執(zhí)行者確認(rèn)后繼續(xù)執(zhí)行,當(dāng)?shù)谝淮未_認(rèn)過后,剩下的所有批次無需再次確認(rèn)是否需要繼續(xù)執(zhí)行,直接執(zhí)行至此任務(wù)結(jié)束。(
注:當(dāng)使用第一批暫停時(shí)按下圖設(shè)置)
3、每批暫停
循環(huán)并發(fā)控制為每批暫停時(shí),把任務(wù)分成N個(gè)批次后,每當(dāng)一個(gè)批次的所有子任務(wù)執(zhí)行結(jié)束后,都需要等待任務(wù)執(zhí)行者確認(rèn)后才能繼續(xù)執(zhí)行下一批次。(使用每批暫停時(shí)按下圖選擇)
五、設(shè)置參數(shù)
如下圖所示,根據(jù)實(shí)際的業(yè)務(wù)情況輸入需要的參數(shù)。參數(shù)輸入完畢后,點(diǎn)擊下一步:確認(rèn)創(chuàng)建
參數(shù)介紹:
commandContent:輸入需要操作的部署命令,命令類型可以是shell、PowerShell、Bat
commandType:選擇執(zhí)行部署命令的類型
tagKey:Tag標(biāo)簽key
tagValue:Tag標(biāo)簽value
maxErrors:循環(huán)的最大錯(cuò)誤數(shù)
batchNumber:設(shè)置分批執(zhí)行的批次數(shù)
六、創(chuàng)建執(zhí)行
參數(shù)確認(rèn)完畢后,點(diǎn)擊創(chuàng)建執(zhí)行之后,此任務(wù)開始正式執(zhí)行
七、執(zhí)行過程,執(zhí)行暫停的恢復(fù)方法
1、當(dāng)循環(huán)并發(fā)控制為自動(dòng)并發(fā)時(shí),無論此任務(wù)有多少批次,都不需要任務(wù)執(zhí)行者來確認(rèn)是否繼續(xù)執(zhí)行。會自動(dòng)執(zhí)行所有的批次。其過程如下所示。
2、當(dāng)循環(huán)并發(fā)控制為第一批暫停時(shí),當(dāng)?shù)谝慌螆?zhí)行結(jié)束后,任務(wù)進(jìn)入等待中,需要任務(wù)執(zhí)行者來確認(rèn)是否繼續(xù)執(zhí)行此任務(wù)。若想繼續(xù)執(zhí)行,按下圖操作,點(diǎn)擊恢復(fù)
,此時(shí)任務(wù)開始繼續(xù)執(zhí)行。余下所有批次無需確認(rèn)恢復(fù)則可以全部執(zhí)行至結(jié)束。
3、當(dāng)循環(huán)并發(fā)控制為每批暫停時(shí),每當(dāng)有一批次的子任務(wù)執(zhí)行結(jié)束后,整個(gè)任務(wù)都會進(jìn)入等待中,進(jìn)而需要點(diǎn)擊恢復(fù)
來繼續(xù)執(zhí)行。如下圖所示,當(dāng)批次2運(yùn)行結(jié)束后,沒有經(jīng)過確認(rèn)恢復(fù),批次3就無法執(zhí)行。
八、異常失敗處理
當(dāng)執(zhí)行時(shí),子任務(wù)可能由于某些原因?qū)е聢?zhí)行失敗,如下圖所示,并點(diǎn)擊下圖所標(biāo)位置,查看失敗的任務(wù)詳情。
在失敗詳情頁找到失敗的子任務(wù)時(shí),可以首先選擇先重試,讓此子任務(wù)重新執(zhí)行,若重試執(zhí)行后依然失敗,可以選擇繼續(xù)重試,或者也可以選擇跳過或取消放棄當(dāng)前的子任務(wù)。
重試:在當(dāng)前情況下重新執(zhí)行失敗的子任務(wù)
跳過:跳過此子任務(wù)
取消:取消當(dāng)前子任務(wù)的執(zhí)行
如上圖所示當(dāng)前第一批次有失敗的情況,分別對其進(jìn)行了跳過和取消處理,其表現(xiàn)形式如下圖所示。
九、執(zhí)行結(jié)果
根據(jù)上面的例子輸入commandContent:date,此腳本為輸出當(dāng)前時(shí)間。如下所示,根據(jù)結(jié)果顯示,當(dāng)前腳本在每個(gè)實(shí)例上都執(zhí)行了一遍。
<>
總結(jié)
由以上的任務(wù)可以發(fā)現(xiàn),在含有多個(gè)子執(zhí)行的任務(wù)中使用分批執(zhí)行的模式,可以快速定位并重試失敗任務(wù)的執(zhí)行。使用分批執(zhí)行的模式來執(zhí)行云助手命令進(jìn)行發(fā)布,方便了運(yùn)維層次的操作,以及方便根據(jù)批次來驗(yàn)證發(fā)布內(nèi)容的實(shí)際效果是否符合預(yù)期的效果或者發(fā)布內(nèi)容是否存在問題,若不達(dá)標(biāo)則可以進(jìn)行余下批次的取消。
<>
歡迎使用OOS
<https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fyuque.antfin-inc.com%2Fzhaoyu.zhaoyu%2Ffnetgd%2Fls4o6i%23yg9z9>
OOS客戶支持釘釘群:23330931
OOS管理控制臺的鏈接
<https://home.console.aliyun.com/redirect.htm?productId=ecs&path=automation/region/>
OOS幫助文檔的鏈接
<https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fhelp.aliyun.com%2Fproduct%2F119529.html>
系列文章
主題文章
阿里云重磅發(fā)布云上自動(dòng)化利器——運(yùn)維編排OOS <https://yq.aliyun.com/articles/708210>
最佳實(shí)踐
玩轉(zhuǎn)運(yùn)維編排服務(wù)的權(quán)限:Assume Role+Pass Role <https://yq.aliyun.com/articles/708218>
場景系列
運(yùn)維編排場景系列----更新ECS鏡像 <https://yq.aliyun.com/articles/712065>
運(yùn)維編排場景系列-----給ECS實(shí)例自動(dòng)打TAG <https://yq.aliyun.com/articles/708142>
運(yùn)維編排場景系列----從實(shí)例中拷貝文件到OSS <https://yq.aliyun.com/articles/708141>
運(yùn)維編排場景系列----給實(shí)例加到SLS機(jī)器組 <https://yq.aliyun.com/articles/708140>
運(yùn)維編排場景系列----檢測MFA功能狀態(tài) <https://yq.aliyun.com/articles/713756>
阿里云運(yùn)維編排新功能:一鍵批量克隆ECS <https://yq.aliyun.com/articles/713348>
運(yùn)維編排場景系列-----每日統(tǒng)計(jì)多Region實(shí)例的運(yùn)行狀態(tài) <https://yq.aliyun.com/articles/714629>
運(yùn)維編排場景系列-----如何使用jq <https://yq.aliyun.com/articles/714479>
運(yùn)維編排場景系列----分批到機(jī)器上運(yùn)行命令 <https://yq.aliyun.com/articles/715631>
熱門工具 換一換