長話短說,今天聊一聊使用Gitlab-CI 自動部署到遠程服務器。linux
若是看過《》這篇文章的朋友,會注意到我是在 Gitlab-Runner服務器上自動部署的站點,本次咱們結合ssh
部署到遠程機器(將CI服務器和部署服務器分離,避免資源搶佔)。
git
仍是那句話,CI/CD實質是將咱們手動集成、拷貝部署的方式腳本化,遠程部署的重要姿式是要求免密操控。web
要讓Gitlab Runner部署到遠程機器,遠程機器必須信任gitlab runner
帳戶。docker
su gitlab-runner
切換到gitlab-runner
帳戶ssh-keygen -t rsa
來建立,程序會問你存放目錄,若是不須要修改,直接回車幾回便可id_rsa.pub
文件拷貝到受控機器的~/.ssh
目錄中,而後將文件內容導入到~/.ssh/authorized_keys
文件主控方: scp /home/gitlab-runner/.ssh/id_rsa.pub 受控方: cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
~/.ssh
權限設置爲700;~/.ssh/authorized_keys
權限設置爲600以後在主控CI機器 就具有免密登錄 遠程機器的能力。服務器
利用鏡像tag持續部署: gitlab項目只要打出tag--> 執行構建鏡像Job(以這次git tag爲鏡像tag)-->執行部署Job,拿到git tag-->部署該tag鏡像框架
CI_COMMIT_REF_NAME
變量獲得 The branch or tag name for which project is builtimage: ${DOCKER_REGISTRY}/eap/eap-front-end:${TAG}
,可感知部署時插入的tag變量build_image:Front-end: stage: build_image script: - docker build -t $DOCKER_REGISTRY_HOST/eap/eap-front-end:$CI_COMMIT_REF_NAME . - docker login $DOCKER_REGISTRY_HOST -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD - docker push $DOCKER_REGISTRY_HOST/eap/eap-front-end:$CI_COMMIT_REF_NAME tags: - my-tag only: - tags deploy:alpha: stage: deploy variables: deploy_path: "/home/eap/website" script: - ssh -t ***@10.202.42.252 "cd $deploy_path && export TAG=$CI_COMMIT_REF_NAME && docker-compose -f docker-compose.yml build && docker-compose -f docker-compose.yml up -d" tags: - my-tag only: - tags
上面的黃色背景行描述了 ssh遠程登錄-->切換到部署目錄-->插入本次構建的git tag--->執行容器部署的腳本寫法。ssh
That'all, 本文記錄了gitlab-ci持續部署到遠程機器的過程: ssh免密登錄是本菜雞最近搞定的姿式,持續部署的方式簡單實用。gitlab
兩年前,本人也是linux小白,也經歷了[想學][放棄][想學][放棄]...的循環。 .NETCore 做爲新一代開源跨平臺框架,面向雲原生而生,容器技術做爲雲原生的奠定石,.NETer要擁抱容器,擁抱Linux。ui