A basic APP build script. Please ignore this article. The author is not talented and can only try to sum up experience repeatedly.
FROM fake front end Engineer
background
The official development tool HBX (abbreviated as HbuilderX) of UniApp needs to manually export the project file and then operate the Android project.
Recall the scenario where the test chased me and the development always had to install the package (previously, Jenkins was used to continuously integrate the IOS platform project, but it was far from the point where the code submitted could automatically package and generate an APP)
Effect achieved
- Submit code and package (automatic pipeline operation)
- Support the configuration of packaged certificates in gitlab-ci.yml
- Support to define package name
- Support custom APP name
Process stage
According to the traditional thinking, namely:
- HbuilderX generates APP resource files
- Generate the original project replacement file according to the template
- Generate file replace native project file
- Android Studio pack
Other ideas are to use automatic packaging tools such as fastlane
Deployment example diagram
NPM cache optional
gitlab-ci.yml file display
stages: - build_uniapp_file - rewrite_android_file - replace_android_file - build_app variables: BUILD_TYPE: app-plus # At present, this process can only package APP PackageName: com.harrycode.testbuild23232 # APP package name APPID: __UNI__APPID #UNI_APPID APPNAME: test # Name of software display CerPwd: 123456 # Certificate password for packaging CerAlias: app # Alias for packaging certificate CerAliasPwd: 123456 # Package the password of certificate alias CerPath: ../../../cer/app.keystore # The location of the package certificate is not recommended to be modified. Change the location to the cer folder of the root directory of the submitted project cache: key: ${CI_COMMIT_SHA} paths: - build-dist/ # Uniapp app plus generation file - android-files/ # Generated Android files (partial) - android-temp/HBuilder-Hello/ # Android project file (manual operation after downloading) Build source files: image: 192.168.1.178:5555/uni-node:v3 # The image is a simplified file of node+vue cli+ UniApp project template project (see DockerHub for details) stage: build_uniapp_file script: - opath=$(pwd) - cp -rf . /buildwork/src - cd /buildwork - rm src/package.json - mv src/build.package.json package.json # - set SASS_BINARY_SITE=https://NPM. Taobao. Org / mirrors / node sass / & & NPM install node sass - npm update && npm install && npm run build:$BUILD_TYPE - mkdir $opath/build-dist/ -p - cp -r /buildwork/dist/build/app-plus/* $opath/build-dist/ artifacts: paths: - build-dist/ change files as wish: image: name: 192.168.1.178:5555/uniappbuildhelper:latest # Please refer to DockerHbu for details of the image generation tool for Android files (you need to configure more parameters and modify this file, then copy to the corresponding location in the next step) stage: rewrite_android_file script: - opath=$(pwd) - cd /app - dotnet UniAppBuildHelper.dll - \cp -r /app/dist/. $opath/android-files artifacts: paths: - android-files/ # Product of this stage, customized partial configuration file change file in Android Project: image: busybox stage: replace_android_file # In this stage, replace the file generated by customization to enter the Android project script: - opath=$(pwd) - source_file_path=$opath/android-files - uni_source=$(pwd)/build-dist - mkdir android-temp && cd android-temp - wget http://192.168.1.178:9090/HBuilder-Hello.zip - unzip HBuilder-Hello.zip - project_src=$(pwd)/HBuilder-Hello - \cp $source_file_path/AndroidManifest.xml $project_src/app/src/main - rm -rf $project_src/app/src/main/java/io # Replace package name with file - java_dir_path=$(echo "$PackageName"| sed "s/\./\//g") - mkdir $project_src/app/src/main/java/$java_dir_path -p # WXEntryActivity.java - \cp $source_file_path/WXEntryActivity.java $project_src/app/src/main/java/$java_dir_path # WXPayEntryActivity.java - \cp $source_file_path/WXPayEntryActivity.java $project_src/app/src/main/java/$java_dir_path # dcloud_control.xml - \cp $source_file_path/dcloud_control.xml $project_src/app/src/main/assets/data # build.gradle - \cp $source_file_path/build.gradle $project_src/app # strings.xml - \cp $source_file_path/strings.xml $project_src/app/src/main/res/values # uniapp files - rm -rf $project_src/app/src/main/assets/apps/* - mkdir $project_src/app/src/main/assets/apps/$APPID/www -p - \cp -r $uni_source/. $project_src/app/src/main/assets/apps/$APPID/www artifacts: paths: - android-temp/HBuilder-Hello/ # The product of this stage is the Android project file after replacing the file build_app: stage: build_app image: 192.168.1.178:5555/android-build-box:1.15.0 before_script: # Please place the nginx static server on the intranet to speed up the download - wget http://192.168.1.178:9090/gradle-5.4.1-bin.zip - mkdir /opt/gradle -p - unzip -d /opt/gradle gradle-5.4.1-bin.zip - export PATH=/opt/gradle/gradle-5.4.1/bin:$PATH script: # Packing - mkdir android-temp/HBuilder-Hello/app/build/outputs/apk/ -p - opath=$(pwd) - cd android-temp/HBuilder-Hello/ - gradle wrapper - bash ./gradlew assembleRelease - \cp -r $opath/android-temp/HBuilder-Hello/app/build/outputs/apk/. $opath/outputs - rm -rf android-temp/ artifacts: paths: - outputs/ # The product of this stage is the Release folder and its APP installation package
effect
Submit directory structure
Note: build.package.json is the package.json generated by NPM version. If you need to use NPM, please add the dependency under dependencies and devdendencies synchronously when building the new required module. The cer folder in this directory is the certificate of packaged UniApp (the certificate path is related to the defined variable CerPath, and the path in this document is the cer in this directory of the submitted file).
Reference command
#Create container docker run -d --name gitlab-runner-12.10.1 --restart always -v ~/gitlab-runner/config/:/etc/gitlab-runner/ -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest #Register Runner after entering the container sudo gitlab-runner register -n --url=GitLb address --registration-token=GitlabRunnerToken Self access --executor=docker --description="HP-Mini-PC" --docker-image="docker:19.03.8" --docker-volumes /var/run/docker.sock:/var/run/docker.sock --locked=false
Other matters
- The image used in this article will be added to DockerHub as soon as possible
- The Gitlab runner of this article is running in the Docker environment, and Gitlab is also running on Docker.
- In this paper, the gitlab runner container is implemented by mounting / var/run/docker.sock in the official document.
- This article has been verified by construction, with 182 builds during the writing period.
- Simple Android file generator source code https://gitee.com/harry7988/uniappbuildhelper