前提
有gitlab 环境, 目标机器有java运行环境
复制代码
一、安装gitlab-runner
docker run -d --name gitlab-runner --restart always -v $PWD/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest
复制代码
二、添加执行器
docker exec -it gitlab-runner gitlab-ci-multi-runner register -n \
--url http://192.168.1.4:8100/ \
--registration-token -LC6aAyNAQ8MLk_9SYQS \
--tag-list=cloudgateway \
--description "spring Cloud gateway demo" \
--docker-privileged=true \
--docker-pull-policy="if-not-present" \
--docker-image "docker:latest" \
--docker-volumes /var/run/docker.sock:/var/run/docker.sock \
--docker-volumes /root/m2:/root/.m2 \
--executor docker
复制代码
注意其中
registration-token
tag-list 默认执行器需要tag才运行,所以指定(settings/ci/cd对应的执行器可以看到默认是需要的)
三、.gitlab-ci.yml 配置
-
gitlab 所在执行器添加密钥
docker exec –it gitlab-runner /bin/sh
ssh-keygen -t rsa
scp -P 68 ~/.ssh/id_rsa.pub root@192.168.1.4:/root/.ssh/authorized_keys (P端口指定要大写)
-
配置gitlab ci环境变量
此变量为执行器ssh的私钥 必须包含头尾的"--- "内容 -
.gitlab-ci.yml 内容
variables:
PACKAGE_JAR: "springCloud2.x-gateway-0.0.1-SNAPSHOT"
stages:
- build
- run
build:
image: maven:3-jdk-8
stage: build
tags:
- cloudgateway
script: "mvn package -B -Dmaven.test.skip=true"
artifacts:
paths:
- target/*.jar
deploy_qa:
image: maven:3-jdk-8 #此镜像包含ssh相应命令
stage: run
tags: #对应的执行起默认需要个tag
- cloudgateway
before_script: #全局的话每个步骤都会执行
- eval $(ssh-agent -s)
# 清除一些系统中复制出现的换行符\r,并重定向到/dev/null防止泄露
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
# 创建~/.ssh目录,并配置权限(非root运行的runner)
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- ssh-keyscan 192.168.1.4 >> ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
script:
- scp -o StrictHostKeyChecking=no -P 68 target/$PACKAGE_JAR.jar root@192.168.1.4:/home/work/
- scp -o StrictHostKeyChecking=no -P 68 entry.sh root@192.168.1.4:/home/work/
#-o StrictHostKeyChecking=no 禁止命令行询问密码 work 目录给与执行权限chmod 777 work/*
- ssh -o StrictHostKeyChecking=no -p 68 root@192.168.1.4 "cd /home/work/ ; ./entry.sh"
复制代码