個人應用經過 azure pipeline 來作持續集成,以前已經介紹了根據不一樣分支去打包不一樣的package,具體的就再也不這裏詳細介紹了,能夠參考 持續集成之nuget進階,nuget 包能夠作到根據不一樣的分支來
發佈不一樣的包,那麼個人應用必定也能夠作到不一樣的分支發佈不一樣 tag 的 docker 鏡像,最後經過 azure pipeline 內置的 Condition 來作判斷,能夠加一些條件腳本在知足特定條件下才執行的腳本再加上變量控制,就能夠比較好的實現根據分支策略來發布不一樣 tag 的 docker 鏡像了git
來看一下修改以後的 azure-pipelines.yaml
示例配置吧:github
steps: # ... - script: docker push $(latestImageName) displayName: 'Push latest image' condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/dev')) - script: docker push $(stableImageName) displayName: 'Push stable image' condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master')) - task: SSH@0 displayName: 'Run shell inline on remote machine' condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/dev')) inputs: sshEndpoint: 'weihanli-vm' runOptions: inline inline: | kubectl set image deployment/activityreservation activityreservation=$(imageName) --record=true
當前面的 step 運行成功而且是 master 分支的 build 時,發佈 tag 爲 stable 的 docker 鏡像,若是是 dev 分支則發佈 tag 爲 latest 的 docker 鏡像,而且僅噹噹前分支爲 dev 時才執行部署操做。docker
完整配置能夠在 Github
上獲取shell
上圖是一個 dev 分支的 build,從上面的截圖能夠看到,只有 master 分支才執行的 step,沒有被執行,直接跳過了ssh