CentOS 服务器上搭建 Jenkins

开发环境:

服务器系统:CentOS release 6.5 (Final)
服务器内核版本:2.6.32-431.el6.x86_64
我的电脑:macOS

  1. 登录远程服务器

    # ssh -p 端口 用户名@IP
    ssh -p 22 root@192.168.11.129
    
  2. 安装 JDK,默认环境有问题

    /usr/lib/jvm/jdk1.8.0_161
    
    • 查看服务器 JDK rpm -qa | grep java

    • 卸载已有 JDK yum remove *openjdk*

    • 官网下载 JDK 包 jdk-8u161-linux-x64.tar.gz

    • 将下载的安装包上传到服务器

      scp /Users/ionesmile/Downloads/jdk-8u161-linux-x64.tar.gz root@192.168.11.129:/usr/lib/jenkins-env
      
      • 使用这条命令时需要处于登出状态 logout
    • 解压安装包到 /usr/lib/jvm 目录

      tar -zxvf jdk-8u161-linux-x64.tar.gz -C /usr/lib/jvm
      
    • 添加环境变量

      • 打开配置 vim /etc/profile

      • 在最前面添加如下代码:

        export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_131  
        export JRE_HOME=${JAVA_HOME}/jre  
        export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
        export  PATH=${JAVA_HOME}/bin:$PATH
        
      • 执行更新配置文件 source /etc/profile

  3. 下载 Jenkins 的 AAR 文件,并启动

    /usr/lib/jenkins
    // 不挂断的执行程序
    nohup java -jar jenkins.war --httpPort=8085 &
    
  4. 开启防火墙端口号(以 8085 端口为例)

    /sbin/iptables -I INPUT -p tcp --dport 8085 -j ACCEPT   写入修改
    
    /etc/init.d/iptables save   保存修改
    
    service iptables restart    重启防火墙,修改生效
    
  5. Git 证书配置

    • 在服务器上生成 SSH key,包括公钥和私钥

      // 查看是否有公钥
      cat ~/.ssh/id_rsa.pub
      // 如果未查询到公钥,通过此命令生成
      ssh-keygen -t rsa -C "wangrui@snaillove.com"
      
    • 在 GitLab 中设置 SSH 公钥(http://xxx/gitlab/profile/keys

    • 在 Jenkins 的证书管理中添加 SSH 私钥

  6. Android SDK 下载,并安装 SDK Platforms 和 Tools

    • 在官网下载 Linux SDK 命令行工具(页面最底部 sdk-tools-linux-3859397.zip

    • 将下载的包上传到服务器

      scp /Users/ionesmile/Downloads/sdk-tools-linux-3859397.zip root@192.168.11.129:/usr/lib/jenkins-env/android-sdk
      
    • 解压 zip 压缩包到当前目录

      unzip sdk-tools-linux-3859397.zip 
      
    • 进入到 /tools/bin/ 目录,使用 sdkmanager

      • 查看已安装和有效的 SDK 包

        sdkmanager --list
        
      • 安装包(命令后面可以跟一个或多个包的路径 Path)

        sdkmanager "build-tools;26.0.0" "platforms;android-26"
        
      • 我的已安装包如下

        Installed packages:
          Path                        | Version | Description                    | Location                    
          -------                     | ------- | -------                        | -------                     
          build-tools;24.0.2          | 24.0.2  | Android SDK Build-Tools 24.0.2 | build-tools/24.0.2/         
          build-tools;25.0.3          | 25.0.3  | Android SDK Build-Tools 25.0.3 | build-tools/25.0.3/         
          build-tools;26.0.0          | 26.0.0  | Android SDK Build-Tools 26     | build-tools/26.0.0/         
          extras;android;m2repository | 47.0.0  | Android Support Repository     | extras/android/m2repository/
          extras;google;m2repository  | 58      | Google Repository              | extras/google/m2repository/ 
          patcher;v4                  | 1       | SDK Patch Applier v4           | patcher/v4/                 
          platforms;android-24        | 2       | Android SDK Platform 24        | platforms/android-24/       
          platforms;android-25        | 3       | Android SDK Platform 25        | platforms/android-25/       
          platforms;android-26        | 2       | Android SDK Platform 26        | platforms/android-26/       
          tools                       | 26.0.1  | Android SDK Tools 26.0.1       | tools/                      
        
  7. 项目基础配置(构建化参数,构建命令等)

    随便找一个文档吧,比如:https://www.jianshu.com/p/38b2e17ced73

  8. 下载打包好的 Apk

    • 开启 Tomcat 服务器

      • 下载 Tomcat,不过发现目录已存在 /usr/local/apache-tomcat-7.0.85
      • 开启 Tomcat catalina.sh start
      • 访问 Tomcat,将文件放到 webapps 目录下访问
    • Gradle 配置,设置安装包输出路径

      android.applicationVariants.all { variant ->
          variant.outputs.each { output ->
              if ("true" == IS_JENKINS){
                  String fileName = "android_test_v${defaultConfig.versionName}_${new Date().format("yyyyMMdd")}_${variant.buildType.name}.apk"
                  output.outputFile = new File(JENKINS_BUILD_PATH, fileName)
              }
          }
      }
      
    • 生成输出路径二维码,实现扫码下载

      • 通过 Python 生成二维码
      • 在 “构建后操作” -> “Set build description” 设置,如果不存在检查是否有安装 “description setter” 插件

遇到的问题

  1. 缺少 SDK 包导致

    * What went wrong:
    A problem occurred configuring project ':BaseCloudMusicResource'.
    > Could not resolve all dependencies for configuration ':BaseCloudMusicResource:_debugCompile'.
       > Cannot resolve external dependency com.android.support:appcompat-v7:24.2.0 because no repositories are defined.
         Required by:
             iLight:BaseCloudMusicResource:unspecified
    

    或如下错误:

    * What went wrong:
    A problem occurred configuring project ':DeviceMusicLibrary'.
    > A problem occurred configuring project ':cloudmusiclibrary:cmreally'.
       > failed to find target with hash string 'android-25' in: /usr/lib/jenkins-env/android-sdk
    

    解决:使用前面提到的 sdkmanager 工具安装提示所缺少的包

  1. glibc 版本过低

    AAPT err(Facade for 1129807373): xxx/aapt: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by xxx/lib64/libc++.so)
    
    Exception in thread "png-cruncher_20" java.lang.RuntimeException: Timed out while waiting for slave aapt process, make sure the aapt execute at /usr/lib/jenkins-env/android-sdk/build-tools/24.0.2/aapt can run successfully (some anti-virus may block it) or try setting environment variable SLAVE_AAPT_TIMEOUT to a value bigger than 5 seconds
    

    原因:CentOS 6.5 最高的 glibc 版本为 2.12,而 aapt 提示需要 2.14 的包

    解决:安装 2.14 的包(存在风险)https://www.cnblogs.com/gavin56/p/6655025.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容