ADD test devops

This commit is contained in:
Jasder
2020-07-10 14:08:16 +08:00
parent dbafd32d0b
commit e74bba9092
16 changed files with 317 additions and 6 deletions
+23
View File
@@ -0,0 +1,23 @@
class DevOps::Drone::Ci
attr_reader :host, :username, :password
# host: drone server's ip
# username: drone server's account
# password: drone server's password
# eq:
# DevOps::Drone::Ci.new(@cloud_account.drone_ip, @cloud_account.account, @cloud_account.visible_secret).get_token
def initialize(host, username, password)
@host = host
@username = username
@password = password
end
def get_token
`sshpass -p #{password} ssh -o "StrictHostKeyChecking no" #{username}@#{host} "#{cmd}"`
end
private
def cmd
"cd ..; cd var/lib/drone/; sqlite3 database.sqlite; .dump; select user_hash from users where user_login=#{username} "
end
end
+39
View File
@@ -0,0 +1,39 @@
class DevOps::Drone::Client
attr_reader :client_id, :drone_ip, :rpc_secret
# client_id: user's client_id from oauth
# drone_ip: 云服务器IP地址, eq: 173.65.32.21
# eq:
# DevOps::Drone::Client.new(current_user.oauth.client_id, 'drone_ip').generate_cmd
def initialize(client_id, drone_ip, rpc_secret)
@client_id = client_id
@drone_ip = drone_ip
@rpc_secret = rpc_secret
end
def run
`docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DRONE_RPC_SERVER=drone-server-#{client_id}:9000 \
-e DRONE_RPC_SECRET=#{rpc_secret} \
-e DRONE_RUNNER_NAME=#{drone_ip} \
--restart always \
--name drone-agent--#{client_id} \
--net="bridge" \
drone/drone-runner-docker:1
`
end
def generate_cmd
"docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DRONE_RPC_SERVER=drone-server-#{client_id}:9000 \
-e DRONE_RPC_SECRET=#{rpc_secret} \
-e DRONE_RUNNER_NAME=#{drone_ip} \
--restart always \
--name drone-agent--#{client_id} \
--net='bridge' \
drone/drone-runner-docker:1
"
end
end
+59
View File
@@ -0,0 +1,59 @@
class DevOps::Drone::Server
attr_reader :client_id, :client_secret, :drone_host, :rpc_secret
# client_id: user's client_id from oauth
# client_secret: user's client_id from oauth
# drone_host: 云服务器地址,eq: 173.53.21.31:80
# eg:
# DevOps::Drone::Server.new(current_user.oauth.client_id, current_user.oauth.client_secret, 'drone_host').generate_cmd
def initialize(client_id, client_secret, drone_host, rpc_secret)
@client_id = client_id
@drone_host = drone_host
@rpc_secret = rpc_secret
@client_secret = client_secret
end
def run
`
docker run \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DRONE_GITEA_SERVER=#{gitea_url} \
-e DRONE_GITEA_CLIENT_ID=#{client_id} \
-e DRONE_GITEA_CLIENT_SECRET=#{client_secret} \
-e DRONE_RPC_SECRET=#{rpc_secret} \
-e DRONE_SERVER_HOST=#{drone_host} \
-e DRONE_SERVER_PROTO=http \
-p "80:80" \
-p "9000:9000" \
--restart=always \
--detach=true \
--name=drone-server-#{client_id} \
--net="bridge" \
drone/drone:1
`
end
def generate_cmd
"service docker start; docker run \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DRONE_GITEA_SERVER=#{gitea_url} \
-e DRONE_GITEA_CLIENT_ID=#{client_id} \
-e DRONE_GITEA_CLIENT_SECRET=#{client_secret} \
-e DRONE_RPC_SECRET=#{rpc_secret} \
-e DRONE_SERVER_HOST=#{drone_host} \
-e DRONE_SERVER_PROTO=http \
-p '80:80' \
-p '9000:9000' \
--restart=always \
--detach=true \
--name=drone-server-#{client_id} \
--net='bridge' \
drone/drone:1
"
end
private
def gitea_url
Gitea.gitea_config[:domain]
end
end
+22
View File
@@ -0,0 +1,22 @@
class DevOps::Drone::Start
attr_reader :drone_username, :drone_password, :drone_host, :drone_server_cmd, :drone_client_cmd
# drone_username="XXXX" 云服务器登录用户名
# drone_password="XXXXX" 云服务器用户密码
# drone_host="" 云服务器地址
# eq:
# drone_server_cmd = DevOps::Drone::Server.new('client_id', 'client_secret', 'drone_url').generate_cmd
# drone_client_cmd = DevOps::Drone::Client.new('client_id', 'server_url').generate_cmd
# DevOps::Drone::Start.new(drone_username, drone_password, 'drone_host', drone_server_cmd, drone_client_cmd).run
def initialize(drone_username, drone_password, drone_host, drone_server_cmd, drone_client_cmd)
@drone_username = drone_username
@drone_password = drone_password
@drone_host = drone_host
@drone_server_cmd = drone_server_cmd
@drone_client_cmd = drone_client_cmd
end
def run
`sshpass -p #{drone_password} ssh -o "StrictHostKeyChecking no" #{drone_username}@#{drone_host} "#{drone_server_cmd} && #{drone_client_cmd}"`
end
end