我有一个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 release
和deploy 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 release
与deploy release
分开以完成此操作?
问题:
如果我只是在每次拉取中拉一张图像,那么我只是得到最新的标签,我不确定是否可以用发行版号标记注册表图像? 用版本号/名称进行标记的原因是,以便在必要时可以重新部署以前的版本。
我想防止将所有发行映像存储在DEV / SIT / UAT / PROD服务器上。发布映像必须存在于注册表服务器中,以便我有一个中心位置可以将它们从中拉出。
答案 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)的标准。