一、環境說明
當前Gitlab Runner與需要進行自動部署服務的目標機器是同一臺機器,環境說明如下
Gitlab Runner宿主機、目標機器
- 系統:CentOS Linux release 7.4.1708 (Core)
- IP:172.50.13.11
Gitlab Runner 環境
- Docker環境
- Docker鏡像:gitlab/gitlab-runner:latest
二、配置ssh密鑰進行免登錄
進入Gitlab Runner容器內,使用gitlab-runner用戶生產公鑰,並將公鑰拷貝到目標機器上,配置到目標服務器的授權密鑰列表中,後續遠程操作時可以免輸入密碼。
查看當前Gitlab Runner容器
fac5a3deb2b7 gitlab/gitlab-runner:latest "/usr/bin/dumb-init …" 16 hours ago Up 16 hours gitlab-runner
進入容器
docker exec -it fac5a3deb2b7 /bin/bash
查看確認當前用戶
cat /etc/passwd
確認有gitlab-runner,如下紅色部分
切換到gitlab-runner用戶,生成密鑰
su gitlab-runner
ssh-keygen
直接回車,自動生成密鑰到/home/gitlab-runner/.ssh/id_rsa目錄下
拷貝密鑰到目標機器
ssh-copy-id -i /home/gitlab-runner/.ssh/id_rsa.pub -p22 [email protected]
測試面密鑰登錄
退出當前容器
exit
此時,gitlab-ruuner中的gitlab-runner用戶可以免登錄進行遠程操作目標機器
三、配置自動部署腳本
當前時後端服務項目,添加了mvn倉庫的緩存配置,加快打包速度
variables: MAVEN_OPTS: "-Djava.awt.headless=true -Dmaven.repo.local=./.m2/repository" MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version" cache: key: "$CI_BUILD_REF_NAME" paths: - ./.m2/repository stages: - build - package build-job: stage: build script: - echo "###################BUILD_STARTED###################" build-talk-train-jar-dev: image: maven:3-jdk-8 stage: package script: - mvn clean - "mvn clean package -Dmaven.test.skip=true $MAVEN_CLI_OPTS" - mkdir -p talk-train-dist/talktrain && mkdir -p talk-train-dist/auth && mkdir -p talk-train-dist/gateway && mkdir -p talk-train-dist/eureka && mkdir -p talk-train-dist/rule - cp -r dicfin-talk-train-api/target/dicfin-talk-train-api-0.0.1-SNAPSHOT.jar talk-train-dist/talk-train - cp -r dicfin-train-auth-api/target/dicfin-train-auth-api-0.0.1-SNAPSHOT.jar talk-train-dist/auth-train - cp -r dicfin-train-zuul-gateway/target/dicfin-train-zuul-gateway-0.0.1-SNAPSHOT.jar talk-train-dist/zuul - cp -r dicfin-train-eureka/target/dicfin-train-eureka-0.0.1-SNAPSHOT.jar talk-train-dist/eureka - cp -r dicfin-talk-train-rule/target/dicfin-talk-train-rule-0.0.1-SNAPSHOT.jar talk-train-dist/rule - du -h --max-depth=1 dicfin-talk-train-api - scp -r talk-train-dist/* [email protected]:/home/ - ssh [email protected] "sh /home/eureka/reload.sh" - ssh [email protected] "sh /home/zuul/reload.sh" - ssh [email protected] "sh /home/rule/reload.sh" - ssh [email protected] "sh /home/auth-train/shutdown.sh" - ssh [email protected] "sh /home/auth-train/start.sh" - ssh [email protected] "sh /home/talk-train/shutdown.sh" - ssh [email protected] "sh /home/talk-train/start.sh" only: - dev artifacts: name: "DEV_${CI_JOB_NAME}_${CI_JOB_ID}" paths: - talk-train-dist/* expire_in: 1 day