1. 1. 目录
  2. 2. 一,下载安装jenkins
    1. 2.0.1. 一个插曲:
    2. 2.0.2. 需要什么?:
    3. 2.0.3. 安装java
    4. 2.0.4. 安装git
    5. 2.0.5. 安装jenkins
  • 3. 二,配置初始化jenkins
    1. 3.0.1. 修改jenkins用户为root
    2. 3.0.2. 修改端口
    3. 3.0.3. 启动jenkins
  • 4. idea
    1. 4.0.1. 创建项目
    2. 4.0.2. 配置项目
  • 5. 四,构建flutter项目
    1. 5.0.1. 尝试brew安装fvm失败
    2. 5.0.2. 尝试在centos安装dart失败.
    3. 5.0.3. 在centos安装flutter
    4. 5.0.4. 安装fvm
    5. 5.0.5. android sdk 配置
    6. 5.0.6. 打包apk
  • 6. 五,使用nginx 服务器放置打包结果
  • 7. 六,企业微信,钉钉或者飞书通知结果
  • 8. 七,最终配置的构建脚本和成果
  • 9. 完结
  • 我亲自拷贝,亲自粘贴,亲自打包。这样勤劳地干活,总得给我多发点工资啊老板

    拿来吧🤞

    辛辛苦苦打完代码,还要亲自动手打包。那可太累了。现在的自动化构建工具非常方便,用jenkins弄个线上自动构建可以大大节约平时的时间。
    这篇文章讲述了从工具安装环境安装,脚本编写到最后服务器部署的方方面面,看完自动化第一步简直so easy。

    目录

    1. 下载安装jenkins
    2. 配置初始化jenkins
    3. 创建git仓库的自动化构建
    4. 服务器安装各种环境,以及添加自动打包构建flutter apk脚本
    5. 使用nginx 服务器开放打包结果以供下载
    6. 企业微信,钉钉或者飞书通知编译部署结果

    一,下载安装jenkins

    我的阿里云ecs服务器之前安装的是centos 6系统.

    一个插曲:

    刚开始尝试 在centos 6 服务器中安装jenkins,但是yum的阿里云镜像源已经不维护centos 6的了.想想反正里面没东西,就先把ecs服务器的系统重装到centos8了.

    需要什么?:

    先搜索linux Jenkins安装教程
    安装jenkins需要依赖于其他运行环境,拉取代码也需要相应的git工具,总结一下 需要安装的库包括如下:

    1. Java
    2. git
    3. Jenkins

    安装java

    安装之前先检查一下系统有没有自带open-jdk
    直接在终端输入java命令,如果当前有java环境,就会直接输出一串东西,如果没有的话,就会提示找不到命令.
    我们利用yum安装java

    1
    2
    3
    4
    5
    6
    7
    # 1更新yum源
    # 2检查yum中有的java库
    # 3安装java11
    sudo yum update
    sudo yum list java*
    # 安装其他版本的java容易出错
    sudo yum install java-1.8.0-openjdk-devel

    这样 java就成功安装到usr/lib/java 中了,这个路径默认就在环境变量中的.

    安装git

    Jenkins拉取git仓库代码的话肯定需要这个工具,直接使用yum安装

    1
    yum install git

    安装jenkins

    以下命令 依次执行,先是下载jenkins 依赖 加入到yum仓库中,再是通过yum安装jenkins。

    1
    2
    3
    sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
    sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
    yum install jenkins

    经过这三个命令,理论上就安装成功了。

    二,配置初始化jenkins

    列出jenkins 相关的目录 :

    • /usr/lib/jenkins/:jenkins安装目录,war包会放在这里
    • /etc/sysconfig/jenkins:jenkins配置文件,“端口”,“JENKINS_HOME”等都可以在这里配置。
    • /var/lib/jenkins/:默认的JENKINS_HOME。
    • /var/log/jenkins/jenkins.log:jenkins日志文件。
      如果我们配置jenkins构建仓库的话,代码也会自动拉取到 /var/lib/jenkins/workspace 目录下。

    修改jenkins用户为root

    通过vim修改 vim /etc/sysconfig/jenkins 文件。找到JENKINS_USER 修改如下。

    1
    $JENKINS_USER="root"

    修改端口

    jenkins默认端口是8080,但是有可能已经有其他应用占用了,修改的话在上面的配置文件中找到 $JENKINS_PORT修改为对应端口就行了。

    启动jenkins

    1
    java -jar /usr/lib/jenkins/jenkins.war 

    启动之后访问地址就行了。比如 http://127.0.0.1:8080.
    当然阿里云服务器得话需要配置安全组,开放8080端口tcp入站。
    访问之后有个初始化过程,我们推荐方式安装jenkins插件。一路按照说明配置完就行了。
    完事后就可以就可以进入工作台了。

    idea

    创建项目

    直接新建item
    img
    选择 freestyle project
    img
    完成之后就能在all中看见新建的项目的.

    配置项目

    接下来进入项目中,点击配置,配置相关的git仓库,访问凭据以及构建脚本
    img
    源码管理选择git,凭据选择ssh 或者用户名密码的方式.
    img
    这样就配置好了git仓库. 在构建的时候,就会自动拉取代码到 /var/lib/jenkins/文件夹下面了.
    另外要根据自己的项目类型便些合适的构建脚本,并且需要在服务器中安装好对应的环境.
    我要尝试 构建flutter项目,先以flutter为例,web以及安卓或者ios同理.

    四,构建flutter项目

    flutter的构建作为开发者我们知道需要安装flutter环境,服务器中构建也是一样。在诸多尝试失败之后,最后我成功使用snap安装上了flutter,并间接安装上了fvm工具
    fvm是flutter的多版本管理工具,我们尝试安装fvm.我之前在macos上安装很轻松写意的,于是打算在centos上也装上.

    尝试brew安装fvm失败

    注意:本人尝试在centos上用brew安装fvm各种失败,有坑请绕过

    1. root用户安装brew失败
    2. 个人用户安装brew下载失败,访问github的域名有问题
    3. 使用镜像安装失败,提示 Another active Homebrew update process is already in progress
    4. 以及其他各种失败~ 很多,各种网络问题系统问题
      最后放弃使用brew安装,准备使用dart安装pub的方式安装fvm

    尝试在centos安装dart失败.

    最后是找到官方的centos 安装文档,是利用编译dart的方式完成.最后还是失败了.中间踩了不少坑.

    1. 获取devtool的时候.googlesource.com 访问不到,最后使用gitee克隆仓库解决
    2. 使用fetch 获取dart源码的时候也是各种网络报错
      最后经过各种挣扎决定放弃直接安装dart.准备采取安装flutter的方式用里面的自带dart曲线救国.

    在centos安装flutter

    官方告诉我们使用snap安装flutter.

    1
    sudo snap install flutter --classic

    我们当然没有安装snap,所以查找snap安装教程安装,最后终于成功了!!!

    1
    2
    3
    4
    5
    $ sudo dnf install epel-release
    $ sudo dnf upgrade
    $ sudo yum install snapd
    $ sudo systemctl enable --now snapd.socket
    $ sudo ln -s /var/lib/snapd/snap /snap

    最后成功安装上了flutter~~~

    安装fvm

    snap安装完flutter之后直接有了环境变量.
    接下来flutter doctor 安装环境, dart pub global activate fvm 安装fvm一气呵成。
    最后配置环境变量

    1
    export PATH="$PATH":"$HOME/.pub-cache/bin"

    完美安装,接下来使用fvm配置安全局flutter环境
    使用 fvm global 2.5.0-5.2.pre 配置全局flutter环境。

    因为之前安装了flutter 所以,需要删除之前的flutter环境变量,将~/fvm/default/bin设置为新的flutter环境变量

    android sdk 配置

    选择要安装的文件夹(我叫它BASE_PATH)并使用以下命令安装带有flutter的SDK:
    安装 SDK

    1
    2
    3
    4
    5
    6
    cd $BASE_DIR 
    mkdir android-sdk
    cd android-sdk
    wget https://dl.google.com/android/repository/commandlinetools-linux-6200805_latest.zip
    unzip commandlinetools-linux-6200805_latest.zip
    ./tools/bin/sdkmanager --sdk_root=$(pwd) "build-tools;28.0.3" "emulator" "platform-tools" "platforms;android-28" "tools"

    打包apk

    在flutter默认项目中,打包很简单,只需要flutter build apk就行了
    这个命令写在jenkins的构建脚本中。

    本来一切都挺好,应该顺利的,但是编译过程中,服务器直接卡死,几十分钟无法打包完毕。
    服务器的性能根本吃不住安卓apk的编译。只能退而求其次,编译web了。

    五,使用nginx 服务器放置打包结果

    1. 按照官方教程安装nginx。配置好源后运行 yum install nginx
    2. 运行nginx sudo systemctl start nginx
    3. 设置nginx开启自启动 sudo systemctl enable nginx
    4. 访问域名就能看到nginx页面了
      img
      以下是Nginx的默认路径:
    • Nginx配置路径:/etc/nginx/
    • PID目录:/var/run/nginx.pid
    • 错误日志:/var/log/nginx/error.log
    • 访问日志:/var/log/nginx/access.log
    • 默认站点目录:/usr/share/nginx/html
      配置nginx: vim /etc/nginx/nginx.conf
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      # 虚拟主机server块
      server {
      # 端口
      listen 8080;
      # 匹配请求中的host值
      server_name localhost;


      # 文件路径
      location /files/ {
      # 查找目录
      root /data;
      }
      配置完成后执行 nginx -t 看是否有错误,如果看到的是下面这种就是成功:
      1
      2
      nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
      nginx: configuration file /etc/nginx/nginx.conf test is successful
      然后执行 nginx -s reload 更新 Nginx 配置文件
      在编译完成之后,只需要将静态网页移交到网页服务器文件夹中就行了。
      一切都很完美。

    六,企业微信,钉钉或者飞书通知结果

    搜索各自的webhook方式就行了。
    我使用的是飞书通知,直接在飞书添加群机器人,拿到webhook链接做post请求就行了。

    七,最终配置的构建脚本和成果

    我最后的构建shell脚本如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #设置好环境变量
    export PATH=$PATH:/root/fvm/default/bin
    export ANDROID_SDK_ROOT=/usr/local/android-sdk-linux
    #编译出产物
    flutter build web --web-renderer canvaskit --no-sound-null-safety --release
    #删除旧的网站
    rm -rf /usr/share/nginx/html/web
    #部署网站
    mv build/web/ /usr/share/nginx/html/
    curl -X POST -H "Content-Type: application/json" -d '{"msg_type":"text","content":{"text":"网页部署成功,地址是 http://www.guuguo.top/ "}}' https://open.feishu.cn/open-apis/bot/v2/hook/*****

    执行编译的话能够自动编译flutter web,自动放置到静态资源服务器下面以供外网访问,还能提交到代码到coding中,把网页通过coding托管到腾讯云中对外提供。

    成果如下,访问http://47.92.80.168/web/ 就能看到部署好的网页了。
    第一个是阿里云nginx服务器,第二个是腾讯云免费托管的。

    完结

    最终受限于服务器的性能没能实现android apk打包,十分可惜,但是也算是学会了一些新东西,以及完成了web的打包发布工作。

    以后不怕费电的话,可以拿自己的电脑当一台自动化服务器

    完结撒花❀❀❀❀❀❀❀