自动化部署

自动化部署

参考:

Gogs安装

docker pull gogs/gogs
docker run -p 10022:22 -p 10080:3000 --name=gogs \
-v /home/docker/gogs/data:/data  \
-d gogs/gogs

Drone安装

  • 首先下载Drone的Server和Runner的镜像;
# Drone的Server
docker pull drone/drone:1
# Drone的Runner
docker pull drone-runner-docker:1

Server:为Drone的管理提供了Web页面,用于管理从Git上获取的仓库中的流水线任务。

Runner:一个单独的守护进程,会轮询Server,获取需要执行的流水线任务,之后执行。

  • 安装drone-server
docker run \
  -v /home/mydata/drone:/data \
  -e DRONE_AGENTS_ENABLED=true \
  -e DRONE_GOGS_SERVER=http://192.168.1.253:10080 \
  -e DRONE_RPC_SECRET=dronerpc666 \
  -e DRONE_SERVER_HOST=192.168.1.253:3080 \
  -e DRONE_SERVER_PROTO=http \
  -e DRONE_USER_CREATE=username:sunbt,admin:true \
  -e TZ="Asia/Shanghai" \
  -p 3080:80 \
  --restart=always \
  --detach=true \
  --name=drone \
  drone/drone:1
  • 配置参数

    • DRONE_GOGS_SERVER:用于配置Gogs服务地址。
    • DRONE_RPC_SECRET:Drone的共享秘钥,用于验证连接到server的rpc连接,server和runner需要提供同样的秘钥。
    • DRONE_SERVER_HOST:用于配置Drone server外部可访问的地址。
    • DRONE_SERVER_PROTO:用于配置Drone server外部可访问的协议,必须是http或https。
    • DRONE_USER_CREATE:创建一个管理员账号,该账号需要在Gogs中注册好。
  • 安装drone-runner-docker,当有需要执行的任务时,会启动临时的容器来执行流水线任务;

docker run -d \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e DRONE_RPC_PROTO=http \
  -e DRONE_RPC_HOST=192.168.1.253:3080 \
  -e DRONE_RPC_SECRET=dronerpc666 \
  -e DRONE_RUNNER_CAPACITY=2 \
  -e DRONE_RUNNER_NAME=runner-docker \
  -e TZ="Asia/Shanghai" \
  -p 3001:3000 \
  --restart always \
  --name runner-docker \
  drone/drone-runner-docker:1
  • 配置参数

    • DRONE_RPC_PROTO:用于配置连接到Drone server的协议,必须是http或https。
    • DRONE_RPC_HOST:用于配置Drone server的访问地址,runner会连接到server获取流水线任务并执行。
    • DRONE_RPC_SECRET:用于配置连接到Drone server的共享秘钥。
    • DRONE_RUNNER_CAPACITY:限制runner并发执行的流水线任务数量。
    • DRONE_RUNNER_NAME:自定义runner的名称。

项目的配置文件

.drone.yml

kind: pipeline # 定义对象类型,还有secret和signature两种类型
type: docker # 定义流水线类型,还有kubernetes、exec、ssh等类型
name: mall-tiny-drone # 定义流水线名称

steps: # 定义流水线执行步骤,这些步骤将顺序执行
  - name: package # 流水线名称
    image: maven:3-jdk-8 # 定义创建容器的Docker镜像
    volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
      - name: maven-cache
        path: /root/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载
      - name: maven-build
        path: /app/build # 将应用打包好的Jar和执行脚本挂载出来
    commands: # 定义在Docker容器中执行的shell命令
      - mvn clean package # 应用打包命令
      - cp target/mall-tiny-drone-1.0-SNAPSHOT.jar /app/build/mall-tiny-drone-1.0-SNAPSHOT.jar
      - cp Dockerfile /app/build/Dockerfile
      - cp run.sh /app/build/run.sh

  - name: build-start
    image: appleboy/drone-ssh # SSH工具镜像
    settings:
      host: 192.168.1.253 # 远程连接地址
      username: root # 远程连接账号
      password:
        from_secret: ssh_password # 从Secret中读取SSH密码
      port: 22 # 远程连接端口
      command_timeout: 5m # 远程执行命令超时时间
      script:
        - cd /home/mydata/maven/build # 进入宿主机构建目录
        - chmod +x run.sh # 更改为可执行脚本
        - ./run.sh # 运行脚本打包应用镜像并运行

volumes: # 定义流水线挂载目录,用于共享数据
  - name: maven-build
    host:
      path: /home/mydata/maven/build # 从宿主机中挂载的目录
  - name: maven-cache
    host:
      path: /home/mydata/maven/cache

Dockerfile

# 该镜像需要依赖的基础镜像
FROM java:8
# 将当前目录下的jar包复制到docker容器的/目录下
ADD dzzh-0.0.1-SNAPSHOT.jar /dzzh-0.0.1-SNAPSHOT.jar
# 声明服务运行在8088端口
EXPOSE 7771
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java", "-jar","/dzzh-0.0.1-SNAPSHOT.jar"]
# 指定维护者的名字
MAINTAINER sunbt

run.sh

#!/usr/bin/env bash
# 定义应用组名
group_name='sunbt'
# 定义应用名称
app_name='dzzh'
# 定义应用版本
app_version='0.0.1-SNAPSHOT'
# 定义应用环境
profile_active='qa'
echo '----copy jar----'
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
docker rmi ${group_name}/${app_name}:${app_version}
echo '----rm image----'
# 打包编译docker镜像
docker build -t ${group_name}/${app_name}:${app_version} .
echo '----build image----'
docker run -p 7771:7771 --name ${app_name} \
--link mysql:db \
-e 'spring.profiles.active'=${profile_active} \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-v /home/mydata/app/${app_name}/logs:/var/logs \
-d ${group_name}/${app_name}:${app_version}
echo '----start container----'

自动化相关密码

主机IP:192.168.1.253

gogs:

  • http://192.168.1.253:10080/

  • sunbt/123456 / 数据库:postgreSQL postgres/postgres

Drone:

  • http://192.168.1.253:3080/
  • sunbt/123456
上一篇:[POJ - 1979]Red and Black


下一篇:现代汽车集团推出概念卡车Trailer Drone