0

在基於詹金斯,碼頭工人和Artifactory的一個CI管道,我的分量建成,集裝箱,然後刊登了以下id來artifactory的部署特定的神器版本AWS ECS:如何在沒有硬編碼的ID在Cloudformation模板

docker.artifacts.mycompany.com/my-component:{Unix時間戳}

詹金斯的最後一個階段,然後還標記,神器與 「最新」 標籤:

docker.artifacts.mycompany.com/my-component:latest

通過這個Cloudformation模板,這個標籤允許AWS ECS拿起神器(標記爲 「最新」)並進行部署:

Parameters: 
    SourceInstanceRole: 
    Type: String 
    Description: The IAM role that the my-component instance will use 
    Default: Jenken-Automation 
    ImageRepository: 
    Type: String 
    Description: The name of the Docker repository which holds my-component Docker images 
    Default: docker.artifacts.mycompany.com 
    ImageName: 
    Type: String 
    Description: The name of the Docker image for my-component 
    Default: my-component 
    ImageVersion: 
    Type: String 
    Description: The version tag of my-component docker image in Artifactory 
    Default: latest 


MyComponentTaskDefinition: 
    Type: AWS::ECS::TaskDefinition 
    Properties: 
     Volumes: 
     - Name: no-volume 
     ContainerDefinitions: 
     - Name: !Ref ContainerName 
     Essential: true 
     Memory: !Ref Memory 
     MemoryReservation: !Ref MemoryReservation 
     Image: !Sub ${ImageRepository}/${ImageName}:${ImageVersion} 

我需要擺脫這種方式,因爲我希望能夠指定任何版本的部署工件 - 而不是「最新」。我的問題是:

如何在未對Cloudformation模板中的圖像版本進行硬編碼的情況下觸發將特定工件版本部署到ECS?

例如爲:docker.artifacts.mycompany.com/my-component:1500436061

回答

1

您需要使用參數覆蓋以編程方式更改您的CloudFormation模板硬編碼的默認值。

因此,例如,或許你的詹金斯打造了一個使用AWS CLI使用如下命令部署CF模板bash腳本:

aws cloudformation deploy --template-file mystack.yml --stack-name mystack 

您可以像這樣ImageVersion變量指定覆蓋:

aws cloudformation deploy --template-file mystack.yml --stack-name mystack --parameter-overrides ImageVersion={Unix timestamp} 

下面是使用CLI的參數覆蓋的文檔:http://docs.aws.amazon.com/cli/latest/reference/cloudformation/deploy/index.html

如果你是我們對於任何語言的AWS SDK,它也將具有參數覆蓋能力。基本上,無論您用於以編程方式部署CF模板的機制,還可以指定一個參數重寫,將默認值更改爲該特定版本的自定義值。

相關問題