最近在解一個在 Travis CI 遇到的一個很奇怪的問題,原先是把 docker build 放到 before_deploy 會出現 docker build already exits 的問題,原本以為是 Travis 對 Docker 的問題所以把 docker build 移掉後就正常了,然後這兩天發現 Travis CI 的 before_deploy 還是會重複打包的動作。
查了一下資料在 Travis 的一張 Issues 單提到「(before|after)_deploy should be run only once before and after all deployment providers」 這個問題從 2014 討論到最近 (Travis 根本沒有想解決!!)
重複 before_deploy 除了會讓 CI 時間拉長以外,如果 before_deploy 無法被二次執行的話就會失敗 (docker build same images and tag),不過在下面的討論是可以用 “變數” 的方式來避免重複執行:
before_deploy: - > if ! [ "$BEFORE_DEPLOY_RUN" ]; then export BEFORE_DEPLOY_RUN=1; my_cmd 1; my_cmd 2; ... fi
順便 tag 一下這篇文章追蹤 Travis 針對這個問題的進度