基于gitlab-runner的CI/CD基本实现(二)
cc项目为例*
1. 注册项目runner
在gitlab的项目内查询本项目的token,在gitlab-runner容器内使用gitlab-runner register
命令完成注册。tags命名为:cc_dev
2. 编辑.gitlab-ci.yml文件,基本内容如下
## 这是cc的自动构建流水线
## 定义阶段
stages:
- build
- deploy
## 第一步构建新的jar包
buildjar:
stage: build
tags:
- dev_cc
script:
- ssh root@项目服务器ip "cd /opt/cc/cc/ && git pull && sh /opt/cc/buildjar.sh;exit"
only:
- dev
## 运行容器
runcontainer:
stage: deploy
tags:
- cc_dev
script:
- ssh root@项目服务器ip "sh /opt/cc/runnercc.sh"
only:
- dev
3. 赋权
3.1服务器赋权
要登陆到远端服务器,需要使用gitlab-runner这个用户身份,要注意的是在docker方式运行gitlab-runner的时候,要进入容器内进行以下操作
docker exec -it gitlab-runner /bin/bash
#su - gitlab-runner
$ssh-keygen ## 生成ssh密钥
$ssh-copy-id 远端服务器用户名@远端服务器地址 ## 将公钥copy至目标服务器
3.2项目赋权
在gitlab服务器上建立用户gitlab-runner(可以自定义用户名),将此用户添加至需要CI/CD的项目内,权限不低于开发人员即可。
3.3本地git仓库的免密登录
在.git/confi内增加如下内容
[credential]
helper = store
4. 服务器脚本示例:
buildjar.sh
#!bin/bash
time=$(date "+%Y-%m-%d %H:%M:%S")
echo "${time}" # 以上两行输出执行脚本时的时间
/usr/bin/docker run --rm -v /opt/cc/cc/ruoyi:/opt/ruoyi -v /etc/localtime:/etc/localtime:ro -v /opt/cc/settings.xml:/usr/share/maven/ref/settings.xml -v /opt/cc/m2:/root/.m2 -w /opt/ruoyi maven:3-openjdk-8 mvn clean package
exit 0
runnercc.sh
#!bin/bash
time=$(date "+%Y-%m-%d %H:%M:%S")
imagedate=`date +%Y%m%d`
echo "${time}" # 以上两行输出执行脚本时的时间
docker tag cc_docker_cc:latest cc_docker_cc:$imagedate && cp /opt/cc/cc/ruoyi/target/cc.jar /opt/cc_docker/cc/ && /usr/bin/docker-compose -f /opt/cc_docker/docker-compose.yml up -d --build
exit 0
cc_docker/docker-compose.yml
version: '2'
services:
cc:
build: .
container_name: cc
mem_limit: 1024m
networks:
nginx:
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
networks:
nginx:
external: true
cc_docker/Dockerfile
FROM java:8
COPY ./cc/cc.jar /opt/cc/cc.jar
WORKDIR /opt/cc
CMD ["java","-jar","-Duser.timezone=GMT+08","-Xms256m","-Xmx256m","cc.jar",">>/dev/null","&"]
EXPOSE 8181