一、环境说明
当前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