mac安装Tomcat与Jenkins持续集成打包app并上传蒲公英

792 阅读6分钟

本文主要介绍app使用jenkins和打包脚本持续打包上传蒲公英的过程

一、常用命令

  • 启动Tomcat
cd /Users/mac/Library/ApacheTomcat/bin

./startup.sh

  • 如果出现-bash: ./startup.sh: Permission denied,是因为用户没有权限,而导致无法执行.需要用命令chmod 修改一下bin目录下的.sh权限
chmod u+x *.sh

  • 关闭Tomcat
./shutdown.sh

  • 查看Tomcat版本信息
sh catalina.sh version

  • 启动/重启jenkins

1,使用命令行启动

sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist

2,使用jenkins的war包启动

java -jar jenkins.war

3,使用容器启动

将jenins安装到Tomcat上,在html网页上选择启动,或者直接输入地址http://localhost:8080/jenkins

  • 停止jenkins

1,使用命令

sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist

2,在html中停止

打开网页http://localhost:8080/exit

二、Tomcat常见使用

1,到Tomacat官网上下载tomcat安装包

tomcat.apache.org/

è¿éåå¾çæè¿°

è¿éåå¾çæè¿°

本人使用的也是mac版本的,这里提供下我所用的tomcat版本download.csdn.net/download/li…

2,将tomcat存放到本地,文件夹重名民为ApacheTomcat,放到/Users/计算机名/Library/目录下

è¿éåå¾çæè¿°

3,启动tomcat,打开Terminal,进入ApacheTomcat所在目录的bin目录下

cd /Users/mymac/Library/ApacheTomcat/bin

启动命令

./startup.sh

如果出现:-bash: ./startup.sh: Permission denied,是因为用户没有权限,而导致无法执行.需要用命令chmod 修改一下bin目录下的.sh权限

chmod u+x *.sh

修改完后重新之执行启动命令:

./startup.sh

即可启动

4,浏览器输入http://localhost:8080或者http://本机ip:8080可以看到下图即安装成功

è¿éåå¾çæè¿°

5,关闭tomat

./shutdown.sh

更多命令可以参考上面常用命令

6,ApacheTomcat目录结构

è¿éåå¾çæè¿°

1>bin:存放tomcat命令
2>conf:存放tomcat配置信息,里面的server.xml文件是核心的配置文件
3>lib:支持tomcat软件运行的jar包和技术支持包(如servlet和jsp)
4>logs:运行时的日志信息
5>temp:临时目录
6>webapps:共享资源文件和web应用目录
7>work:tomcat的运行目录.jsp运行时产生的临时文件就存放在这里

7,修改端口号

服务器的默认端口是8080,也可以将其改成自定义的端口,为了避免与系统端口冲突,必须设置为1024以上,例如设置为8888
用记事本打开ApacheTomcat的conf目录下的server.xml文件,将以下语句的port值8080改为自定义的端口号:(例如8020)

<Connector port="8020" protocol="HTTP/1.1"
          connectionTimeout="20000"
          redirectPort="8443" />

重新启动服务器后输入localhost:8080无效,需要输入localhost:8020就可以打开服务器的界面了.

8,密码设置

在conf目录的tomcat-users.xml文件里上面加入以下代码:

<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>

因为xml的标签都要关闭,还要重启tomcat. 重新打开http://localhost:8080到Tomcat主界面,点击 Manager App等按钮账号和密码输入tomcat即可登陆

9,tomcat官方文档地址

tomcat.apache.org/tomcat-8.0-…

三、Jenkins常见使用

1,到官网下载jenkins包

bitnami.com/stack/jenki…

这里也提供下本人所使用的jenkins包

download.csdn.net/download/li…

2,jenkins的安装与启动

将上述文件安装后会在Library/jenkins目录下得到jenkins的war包,直接放到 User/mymac/Library/ApacheTomcat/webapps/目录下即可,然后使用命令行启动

sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist

当然也可以使用java命令与war包启动,然后cd到当前目录后使用命令

java -jar jenkins.war

其实,如果你下载的是我上面提供的pkg包,安装后会自动打开浏览器界面进行jenknis的配置与安装

3,jenins安装异常情况

注意安装 JRE ,这个需要注意版本,如果版本不符合要求,会无法访问 jenkins

经测试,使用mac自带的openjkd可能会出问题,最好使用oraclejdk,同时不同版本的jkd可能也会有问题,这里提供下本人使用的jdk版本jdk-8u144-macosx-x64,需要可以私信我,jkd官网地址www.oracle.com/technetwork…

4,jenkins的停止

可以打开浏览器输入jenkins地址加上exit二级页面即可退出,http://localhost:8080/exit

当然也可以使用命令行关闭

sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist

5,jenkins重启

在浏览器输入http://localhost:8080/restart

6,jenkins重新加载配置信息

在浏览器输入http://localhost:8080/reload

7,jenkins的卸载

方法1:执行命令/Library/Application Support/Jenkins/Uninstall.command

方法2:前往文件夹:/Library/Application Support/Jenkins,双击Uninstall.command

完成之后再次打开http://localhost:8080  访问不了,说明卸载成功

8,jenkins的简单使用

首先我们需要配置我们需要的jdk Gradle maven环境

jdk配置

gradle配置

maven配置

还有些其他的配置也在这个目录下,由于开发暂时不需要,这里目前还没配置

新建项目

在这里配置shell命令

配置完成后便可以进行构建

9,jenkins官方文档地址

www.w3cschool.cn/jenkins/

四、安装Gitlab

这里参照官网安装教程,命令和官网是一样的,不过有些地方有特殊说明,所以,可以直接参照本小节来安装。

1、安装GitLab依赖

sudo apt-get install curl openssh-server ca-certificates postfix

注意,在安装postfix的时候,选择“internet site”:

è¿éåå¾çæè¿°

然后,“system mail name”填写你的服务器的IP地址(下面这张图只是):

è¿éåå¾çæè¿°

为什么要填IP地址呢? 
这是因为,如果自己手上没有已注册的域名的话,随便填写一个域名是解析不了的。而这里填写的域名对GitLab影响很大,比如我这里随便填为“qsjn.com”,那我在GitLab中创建的项目默认就会使用“git@qsjn.com”这样的地址,这就会带来不必要的麻烦。但是,如果你真的有注册域名的话,还是建议填写你的注册域名。

2、下载和安装GitLab

curl packages.gitlab.com/install/rep…

sudo bash sudo apt-get install gitlab-ee

3、配置GitLab

GitLab默认会占用8080809090端口,很不巧,Jenkins默认也会使用8080端口,所以,这一步操作将会修改GitLab的默认端口为110001100111002,如果你还是希望使用默认端口的话,可以跳过这一步。

(1)将

external_url 'http://127.0.0.1'

修改为:

external_url 'http://<你的服务器地址或域名>:11000'

(2)将

unicorn['port'] = 8080

修改为:

unicorn['port'] = 11001

(3)将

#prometheus['listen_address'] = 'localhost:9090'

修改为:

prometheus['listen_address'] = 'localhost:11002'

4、生效配置和启动GitLab

因为我们修改了配置,所以使用reconfigure命令重新配置

sudo gitlab-ctl reconfigure

另外说明一下,平时未修改配置的话,可以使用:

sudo gitlab-ctl start/stop

来启动和关闭GitLab.

至此,GitLab安装完毕

详细参考https://blog.csdn.net/ruangong1203/article/details/73065410

五、App持续集成并上传至蒲公英(待完善)

1,既然我们已经配置好jenkins,现在我们所需要做的仅仅是编写项目的shell命令相关,这里贴一下AndroidBuild.sh命令

#!/bin/bash
#执行此脚本前,应该安装jq命令。 安装请使用brew install jq
#jq命令用于解析修改json文件。将配置参数替换到项目中config.json文件


#获取workspace名称
projectName=jure
#编译条件 Release Debug 两种
configuration=Release
#打包方式
method=adHoc
#当前时间
nowtime=`date +"%F日%H:%M:%S"`
#文件导出目录
exportPath=~/Documents/app/android-${method}/${nowtime}
#打包api默认使用的环境
envType='qa'
#是否发布应用市场
Publish_Market=$2

if [ $# -eq 2 ]
then
    envType=$1
    if [ $Publish_Market = true ]
    then
        envType='online'
        method='appstore'
    fi
else
    Publish_Market=false
fi


echo '------编译参数-----'
echo envType: $envType  method:$method

#重置项目根目录下config.json配置文件
resetConfigJsonFile(){
    configFilePath="../config.json"
    cat $configFilePath | jq ".envType="${envType}"" > tmpConfig.json && mv tmpConfig.json $configFilePath
    if [ $Publish_Market = true ]; then
        #发布应用市场的时候,一定要关闭调试面板
        cat $configFilePath | jq ".showDebugPanel=false" > tmpConfig.json && mv tmpConfig.json $configFilePath
    else
        cat $configFilePath | jq ".showDebugPanel=true" > tmpConfig.json && mv tmpConfig.json $configFilePath
    fi
}

#创建文件夹
createDir(){

    if [ ! -d "${exportPath}" ]; then
        mkdir -p ${exportPath}
    fi
    echo 文件夹创建成功,打包中间产物将全部导出到:${exportPath}目录下
}

#打印git commit信息
echoGitCommitId(){
    echo 即将开始打包~
    cd ..
    echo 当前编译包使用的Git分支为:`git describe --contains --all HEAD|tr -s '\n'`
    echo 当前编译包使用的Git commit短id为:`git rev-parse --short HEAD`
    echo 当前编译包使用的Git commit完整id为:`git rev-parse HEAD`
    echo 当前config.json基础配置信息如下
    cat ./config.json
    cd PackageShellFiles
}

#导出apk包到指定的文件路径
buildApk(){

    currentPath=`pwd`
#    cd ../android #进入ios文件目录


    #version.properties文件所在的目录
    path='../android'
    content=$(cat ${path}/version.properties)
    echo "读取内容:$content"
    #读取文件的VERSION_CODE对应的value,保存versionCode变量
    versionCode=`grep VERSION_CODE ${path}version.properties|cut -d'=' -f2`
    #将versionCode+1,得到累加后的addVersionCode
    addVersionCode=`expr $versionCode + 1`
    echo "versionCode====$versionCode"
    # 将addVersionCode重新累加赋值给文件的VERSION_CODE
    sed -i "s#^VERSION_CODE=.*#VERSION_CODE=${addVersionCode}#g"  ${path}version.properties
    content=$(cat ${path}version.properties)
    addVersionCode=`grep VERSION_CODE ${path}version.properties|cut -d'=' -f2`
    echo "替换之后====$content"
    echo "addVersionCode====$addVersionCode"
    #判断versionCode是否累加成功, -gt标识大于返回true
    if [ $addVersionCode -gt $versionCode ]
    then
    # 打包apk
    #gradlew 对应目录
    BUILD_TOOL_PATH='../android'
    echo "开始打包..."
    chmod -R 777 dev_crm_app2
    #cd $BUILD_TOOL_PATH && ./gradlew assembleinsectRelease
     cd $BUILD_TOOL_PATH && ./gradlew assembleDebug
    openRootPath='../android/app'
    #打包完成打开包所在的目录,当然,程序里面的这面绝对路径请替换成你对应的路径,不然程序运行不会成功
#    explorer $openRootPath'\build\outputs\apk'

    #移动打包相关文件
    mv ${path}/app/build/outputs/apk/debug/app-debug.apk ${exportPath}/${projectName}.app.apk
    mv ${path}/app/build/outputs/apk/debug/output.json ${exportPath}/${projectName}.output.json
    #还原路径
    cd ${currentPath}

    # todo 上传至蒲公英
    sh uploadPackage.sh ${exportPath}/${projectName}.app.apk
    else
    echo "error : versionCode未加1" 
    fi
}

#1.先打印编译时的基础信息. 2.再创建文件目录以及安装描述文件 3.打包apk并自动上传包管理平台
#resetConfigJsonFile
#echoGitCommitId
createDir
buildApk

2,上传蒲公英命令

#!/bin/sh
#set -e

#安装包文件路径
packagePath=$1

#蒲公英配置的参数
readonly APIKey=428c221853ed052ca74846e5bfe46dfe
readonly UserKey=38951568cffd3426e9e8b5e59b667eca
#蒲公英账号密码
#地址:https://www.pgyer.com/
#账号:
#密码:

# 校验包文件是否存在
checkPackagePath(){
    if [ ! -f "${packagePath}" ]; then
        echo '/*------------------------------\033[41;37m注意\033[0m---------------------------*/'
        echo 'package not exist, please checkout file at Path:' ${packagePath}
        exit 1;
    fi
}


# 上传安装包到蒲公英
uploadWithPgyer(){
    echo "开始上传到pgyer----------------->"
    curlresponse=$(curl -i -F "file=@$packagePath" \
                -F "uKey=$UserKey" \
                -F "_api_key=$APIKey" \
                http://qiniu-storage.pgyer.com/apiv1/app/upload)
    echo '---------安装包上传蒲公英结果------'
    echo $curlresponse
}

checkPackagePath
uploadWithPgyer

3,ios相关的同理,下次有空再完善

\