瀏覽代碼

Merge pull request #3 from meolu/master

同步 master
flying 6 年之前
父節點
當前提交
ea1f4f5092

+ 5 - 1
README.md

@@ -101,8 +101,12 @@ Discussing
 
 <img src="https://raw.githubusercontent.com/meolu/walle-web/master/screenshot/weixin-ye.jpg" width="244" height="314" alt="叶歆昊微信" align=left />
 
+<img src="https://raw.githubusercontent.com/meolu/walle-web/master/screenshot/weixin-zouhongxue.jpg" width="244" height="314" alt="keep learn微信" align=left />
 
-<br><br><br><br><br><br><br><br><br><br><br><br><br><br>
+<img src="https://raw.githubusercontent.com/meolu/walle-web/master/screenshot/weixin-xupengfei.jpg" width="244" height="314" alt="Flying 微信" align=left />
+
+<br><br><br><br><br><br><br><br><br><br><br><br><br>
+<br><br><br><br><br><br><br><br><br><br><br><br><br>
 
 新的惊喜
 =========================

+ 20 - 3
admin.sh

@@ -8,7 +8,18 @@
 # Author: alenx <alenx.hai@gmail.com>
 # -->>  新增ubuntu初始化,全面支持Ubuntu环境(16.x/18.x)
 #########################################################################
-#!/bin/bash
+#!/usr/bin/env bash
+
+# ubuntu 高版本 sh 指向的是 dash 而非 bash。 dash 无法使用 function 关键字以及 source 等命令。
+# 如果检测到 sh 指向的是 dash, 那么将使用 bash 重新执行脚本,然后在参数末尾加上一个 flag, 表示此次运行是修正过的, 避免陷入死循环。
+fix_ubuntu_bash="fix-sh-in-ubuntu"
+
+if [ ! -n "`echo $@ | grep $fix_ubuntu_bash$`" ]; then
+    if [ -n "`ls -l /bin/sh | grep "dash"`" ]; then
+        bash $0 $@ $fix_ubuntu_bash
+        exit
+    fi
+fi
 
 APP="waller.py"
 
@@ -47,9 +58,15 @@ function SystemName() {
             ;;
 
         debian|ubuntu|devuan)
-            echo "安装/更新可能缺少的依赖: ibmysqld-dev gcc gcc-c++ python-dev"
+            echo "安装/更新可能缺少的依赖: libmysqld-dev libmysqlclient-dev python-dev python-virtualenv python-pip"
+            sudo apt update -y
+            sudo apt install -y libmysqld-dev libmysqlclient-dev python-dev python-virtualenv python-pip
+            ;;
+
+        raspbian)
+            echo "安装/更新可能缺少的依赖"
             sudo apt update -y
-            sudo apt install -y libmysqld-dev python-dev virtualenv python-pip
+            sudo apt install -y gcc g++ python-dev virtualenv python-pip libpq-dev libffi-dev libssl-dev libmariadbd18 libmariadbd-dev
             ;;
 
         *)

文件差異過大導致無法顯示
+ 1 - 1
fe/index.html


文件差異過大導致無法顯示
+ 10 - 0
fe/static/js/1.d47e2dcd0b1e74a9f703.js


二進制
fe/static/js/1.d47e2dcd0b1e74a9f703.js.gz


文件差異過大導致無法顯示
+ 1 - 0
fe/static/js/11.ad09d7600b0017fc9a8b.js


文件差異過大導致無法顯示
+ 1 - 0
fe/static/js/app.6bb8d1994240946e5f1b.js


二進制
fe/static/js/app.6bb8d1994240946e5f1b.js.gz


文件差異過大導致無法顯示
+ 1 - 0
fe/static/js/manifest.a0af51ee57e7900644cf.js


二進制
screenshot/weixin-xupengfei.jpg


二進制
screenshot/weixin-zouhongxue.jpg


+ 1 - 1
walle/form/user.py

@@ -68,4 +68,4 @@ class UserUpdateForm(FlaskForm):
 class LoginForm(FlaskForm):
     email = StringField('email', [validators.Length(min=6, max=35),
                                   Regexp(r'^(.+)@(.+)\.(.+)', message='邮箱格式不正确')])
-    password = PasswordField('Password', [validators.Length(min=6, max=35)])
+    password = PasswordField('Password', [validators.Length(min=6)])

+ 9 - 5
walle/service/deployer.py

@@ -79,20 +79,24 @@ class Deployer:
             )
             current_app.logger.info(self.taskMdl)
 
+            # 将环境变量包在 "" 里,防止特殊字符报错
+            format_export = lambda val: '"%s"' % str(val).replace('"', '').replace("'", '')
+
             self.custom_global_env = {
                 'WEBROOT': str(self.project_info['target_root']),
                 'VERSION': str(self.release_version),
                 'CURRENT_RELEASE': str(self.project_info['target_releases']),
-                'BRANCH': str(self.taskMdl.get('branch')),
+                'BRANCH': format_export(self.taskMdl.get('branch')),
                 'TAG': str(self.taskMdl.get('tag')),
                 'COMMIT_ID': str(self.taskMdl.get('commit_id')),
-                'PROJECT_NAME': str(self.project_info['name']).replace('"', '').replace("'", '').replace(" ", '_'),
+                'PROJECT_NAME': format_export(self.project_info['name']),
                 'PROJECT_ID': str(self.project_info['id']),
-                'TASK_NAME': str(self.taskMdl.get('name')).replace('"', '').replace("'", '').replace(" ", '_'),
+                'TASK_NAME': format_export(self.taskMdl.get('name')),
                 'TASK_ID': str(self.task_id),
                 'DEPLOY_USER': str(self.taskMdl.get('user_name')),
                 'DEPLOY_TIME': str(time.strftime('%Y%m%d-%H:%M:%S', time.localtime(time.time()))),
             }
+
             if self.project_info['task_vars']:
                 task_vars = [i.strip() for i in self.project_info['task_vars'].split('\n') if i.strip() and not i.strip().startswith('#')]
                 for var in task_vars:
@@ -429,7 +433,7 @@ class Deployer:
         with waller.cd(self.project_info['target_releases']):
             result = waller.run(command, wenv=self.config())
 
-        command = 'rm -rf `ls -t {project_id}_* | tail -n +{keep_version_num}`'.format(
+        command = 'ls -t {project_id}_* | tail -n +{keep_version_num} | xargs rm -rf'.format(
             project_id=self.project_info['id'], keep_version_num=int(self.project_info['keep_version_num']) + 1)
         with waller.cd(self.project_info['target_releases']):
             result = waller.run(command, wenv=self.config())
@@ -522,7 +526,7 @@ class Deployer:
                     waller = Waller(host=host, user=server_info['user'], port=server_info['port'], inline_ssh_env=True)
                     waller.init_env(env=self.custom_global_env)
 
-                    self.connections[host] = waller                   
+                    self.connections[host] = waller
                     self.prev_release_custom(self.connections[host])
                     self.release(self.connections[host])
                     self.post_release(self.connections[host])