10分钟搞定的内网自动部署

获取gitlab的权限(Create an OAuth Application)

在这里插入图片描述

重定向的URL必须是drone 安装的机器路径可以是IP地址

例如: 192.168.29.11/login

在这里插入图片描述

创建一个gitlabdrone的共享秘钥

$ openssl rand -hex 16
bea26a2221fd8090ea38720fc445eca6

docker 启动

# 注意!!! 替换需将花括号一起替换掉
$ docker run \
  --volume=/var/lib/drone:/data \        # 数据库保存地址,自定义
  --env=DRONE_GITLAB_SERVER=https://gitlab.com \   # gitlab 网址,内网可以是IP地址
  --env=DRONE_GITLAB_CLIENT_ID={{DRONE_GITLAB_CLIENT_ID}} \  # 第一步生成的client_id
  --env=DRONE_GITLAB_CLIENT_SECRET={{DRONE_GITLAB_CLIENT_SECRET}} \   # 第一步生成的client_secret
  --env=DRONE_RPC_SECRET={{DRONE_RPC_SECRET}} \   # 第二步生成的秘钥
  --env=DRONE_SERVER_HOST={{DRONE_SERVER_HOST}} \  # drone 运行的服务器地址
  --env=DRONE_SERVER_PROTO={{DRONE_SERVER_PROTO}} \  # 指定http  
  --publish=80:80 \
  --publish=443:443 \
  --restart=always \
  --detach=true \
  --name=drone \
  drone/drone:1
  
  

安装runner

docker-runner
docker run -d \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e DRONE_RPC_PROTO=http \
  -e DRONE_RPC_HOST=https://gitlab.com \
  -e DRONE_RPC_SECRET={{DRONE_RPC_SECRET}} \
  -e DRONE_RUNNER_CAPACITY=2 \
  -e DRONE_RUNNER_NAME=${HOSTNAME} \   # 这个不需要替换,默认为机器的名称
  -p 3000:3000 \
  --restart always \
  --name runner \
  drone/drone-runner-docker:latest
ssh-runner
  
  docker run -d \
  -e DRONE_RPC_PROTO=http \
  -e DRONE_RPC_HOST=https://gitlab.com \
  -e DRONE_RPC_SECRET={{DRONE_RPC_SECRET}} \
  -p 3000:3000 \
  --restart always \
  --name runner \
  drone/drone-runner-ssh

log

time="2021-06-21T03:35:08Z" level=info msg="starting the server" addr=":3000"
time="2021-06-21T03:35:08Z" level=info msg="successfully pinged the remote server"

如何使用

使用目的: 将GO web 项目 通过dockerfile 进行打包运行,

故,我将使用ssh-runner

FROM golang:1.14 as builder

ENV GOSUMDB off
ENV GOPROXY https://goproxy.cn
ENV GO111MODULE on

# 增加分层,减少下载依赖包
WORKDIR /go/cache
ADD go.mod .
ADD go.sum .
RUN go mod download

RUN mkdir -p /go/src/project
WORKDIR /go/src/project

COPY . .
#RUN echo -e http://mirrors.ustc.edu.cn/alpine/v3.7/main/ >> /etc/apk/repositories
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .

FROM alpine:latest
RUN apk update && apk add --no-cache ca-certificates


# 设置alpine 时间为上海时间
RUN apk add tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone \
    && apk del tzdata


WORKDIR /root/
COPY --from=builder /go/src/project/main .
COPY --from=builder /go/src/project/config.yaml .
COPY --from=builder /go/src/project/run.sh .

EXPOSE 8888


ENTRYPOINT ["/root/main"]

run.sh

简单脚本,可以根据自己要求,修改

#!/usr/bin/env bash

#定义应用名

echo "应用名称为:$1";
echo "应用使用端口:$2"
# 执行相关命令
echo '根据dockerfile 构建镜像'
docker build -f Dockerfile -t   $1 .
docker stop   $1
echo docker rm $1
docker rm   $1
echo docker run -d --name=  $1 -p $2:$2 -v /data/www/log/$1/:/log   $1:latest
docker run -d --name=$1 -p $2:$2 -v /data/www/log/$1/:/log   $1:latest 
#echo "清理中间镜像,可以一个月清一次的"
#docker image prune -f

.drone.yml

name: default
kind: pipeline
type: ssh


server:
  host: {IP}
  user: {user}
  password:
    from_secret: password    # 在drone 里面的项目进行配置


steps:
  - name: publish
    commands:
      - chmod 755 run.sh
      - ./run.sh  {{应用名称}}  8888

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐