Azure devops发布管道-在环境之间共享的特定docker映像

时间:2019-12-08 09:26:19

标签: docker azure-devops azure-pipelines

我有一个Web应用程序,我想使用azure管道进行dockerise和发布。 我已经可以构建和测试了,但是正在努力发布它。

构建管道(在受VSTS代理控制的构建服务器上):

1) Build using .net core
2) Run unit tests using .net core
3) Build docker image
4) Push to registry

然后这将自动触发我的发布管道。发布管道有两个阶段,分别是create releasedeploy release。 非docker方案是创建DLL(create release)并部署在Web服务器(deploy release)上。我不确定这是否/如何适用于docker应用。

发布管道(在每个环境服务器上运行的单独的发行代理):

Artifact (CI Build) => DEV => SIT => UAT => PROD

在每种环境中,我都会这样做:

1) stop and remove old image/container
2) pull 'latest' tag from repository
3) run new image in docker container.

问题: 如何创建单个发布特定的docker映像,然后将其推送到每个环境?如何将create releasedeploy release分开以完成此操作?

问题

  • 如果我只是在每次拉取中拉一张图像,那么我只是得到最新的标签,我不确定是否可以用发行版号标记注册表图像? 用版本号/名称进行标记的原因是,以便在必要时可以重新部署以前的版本。

  • 我想防止将所有发行映像存储在DEV / SIT / UAT / PROD服务器上。发布映像必须存在于注册表服务器中,以便我有一个中心位置可以将它们从中拉出。

1 个答案:

答案 0 :(得分:0)

解决您的问题

您的create-release工作看起来像这样。

echo $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
docker build -t $CI_REGISTRY_IMAGE -t $CI_REGISTRY_IMAGE:$VERSION .
docker push $CI_REGISTRY_IMAGE
docker push $CI_REGISTRY_IMAGE:$VERSION

您的deploy release工作看起来像这样。

echo $DOCKER_HUB_PASSWORD | docker login -u $DOCKER_HUB_USER --password-stdin $REGISTRY_URL
docker pull $CI_REGISTRY_IMAGE
docker pull $CI_REGISTRY_IMAGE:$VERSION
docker tag $CI_REGISTRY_IMAGE $DOCKER_HUB_USER/crystal-skull
docker tag $CI_REGISTRY_IMAGE:$VERSION $DOCKER_HUB_USER/$IMAGE_NAME:$VERSION
docker push $DOCKER_HUB_USER/$IMAGE_NAME
docker push $DOCKER_HUB_USER/$IMAGE_NAME:$VERSION

解决您的问题

是的,您可以使用特定的发行版号标记注册表映像。这是Docker注册表(包括Docker Hub)的标准。