| 知乎專欄 | 多維度架構 | 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者” |
Maven 子模組創建方法 https://www.netkiller.cn/java/build/maven.html#maven.module
目錄結構
Project
|
|--- common (Shared)
| | ---pom.xml
|--- project1 (depend common)
| |--- pom.xml
|--- project2 (depend common)
| |--- pom.xml
|---pom.xml
構建 父項目
pipeline {
agent {
label "default"
}
stages {
stage("檢出") {
steps {
checkout(
[$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]],
userRemoteConfigs: [[url: env.GIT_REPO_URL]]]
)
}
}
stage("構建") {
steps {
echo "構建中..."
sh 'mvn package -Dmaven.test.skip=true' // mvn 示例
archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true // 收集構建產物
echo "構建完成."
}
}
stage("測試") {
steps {
echo "單元測試中..."
// 請在這裡放置您項目代碼的單元測試調用過程,例如:
sh 'mvn test' // mvn 示例
echo "單元測試完成."
junit '**/target/surefire-reports/*.xml' // 收集單元測試報告的調用過程
}
}
stage("部署") {
steps {
echo "部署中..."
echo "部署完成"
}
}
}
}
構建共享項目
pipeline {
agent {
label "default"
}
stages {
stage("檢出") {
steps {
checkout(
[$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]],
userRemoteConfigs: [[url: env.GIT_REPO_URL]]]
)
}
}
stage("構建") {
steps {
echo "構建中..."
dir(path: 'common') {
sh 'mvn package -Dmaven.test.skip=true' // mvn 示例
archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true // 收集構建產物
}
echo "構建完成."
}
}
stage("測試") {
steps {
echo "單元測試中..."
sh 'mvn test' // mvn 示例
echo "單元測試完成."
junit 'target/surefire-reports/*.xml' // 收集單元測試報告的調用過程
}
}
stage("部署") {
steps {
echo "部署中..."
dir(path: 'common') {
sh 'mvn install'
}
echo "部署完成"
}
}
}
}
構建 project1 和 project2
pipeline {
agent {
label "default"
}
stages {
stage("檢出") {
steps {
checkout(
[$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]],
userRemoteConfigs: [[url: env.GIT_REPO_URL]]]
)
}
}
stage("共享庫") {
steps {
echo "構建中..."
dir(path: 'common') {
sh 'mvn install -Dmaven.test.skip=true' // mvn 示例
archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true // 收集構建產物
}
echo "構建完成."
}
}
stage("構建") {
steps {
echo "構建中..."
dir(path: 'project1') {
sh 'mvn package -Dmaven.test.skip=true' // mvn 示例
archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true // 收集構建產物
}
echo "構建完成."
}
}
stage("測試") {
steps {
echo "單元測試中..."
sh 'mvn test' // mvn 示例
echo "單元測試完成."
junit 'target/surefire-reports/*.xml' // 收集單元測試報告的調用過程
}
}
stage("部署") {
steps {
echo "部署中..."
// 部署腳本
echo "部署完成"
}
}
}
}
pipeline {
agent any
stages {
stage("Checkout") {
steps {
sh 'ci-init'
checkout(
[$class : 'GitSCM', branches: [[name: env.GIT_BUILD_REF]],
userRemoteConfigs: [[url: env.GIT_REPO_URL]]]
)
}
}
stage("Compile") {
// 構建的 docker 鏡像
agent {
docker { image 'maven' }
}
steps {
echo "構建中..."
sh 'mvn -v'
sh 'mvn compile'
}
}
stage('Test') {
agent {
docker { image 'maven' }
}
steps {
echo '單元測試...'
sh 'mvn test'
junit 'target/surefire-reports/*.xml'
}
}
stage("Deploy") {
steps {
echo "部署中..."
echo "部署完成"
}
}
}
}
pipeline {
agent any
stages {
stage('Build') {
steps {
echo '編譯中...'
// 編譯 docker 鏡像
sh "docker build $tag $contextPath"
}
}
stage('Push Image') {
steps {
sh "echo ${REGISTRY_PASS} | docker login -u ${REGISTRY_USER} --password-stdin ${REGISTRY_URL}"
sh "docker tag ${image} ${registry_image}"
sh "docker push ${registry_image}"
}
}
}
}
pipeline {
agent any
stages {
stage("Checkout") {
steps {
checkout([
$class: 'GitSCM',
branches: [[name: env.GIT_COMMIT]],
extensions: [[$class: 'PruneStaleBranch']],
userRemoteConfigs: [[
url: env.GIT_REPO_URL,
refspec: "+refs/heads/*:refs/remotes/origin/*"
]]
])
sh '''
#!/bin/bash
echo ${GIT_COMMIT}
echo ${REF}
echo ${GIT_LOCAL_BRANCH}
'''
}
}
stage('Build') {
steps{
echo "Building begin"
script{
// 設置鏡像名
env.BUILD_MODULE = "common"
env.DOCKER_IMAGE_TAG = env.BUILD_MODULE + ':' + env.GIT_COMMIT
env.DOCKER_REMOTE_IMAGE_TAG = "${env.REGISTRY_URL}/${env.DOCKER_IMAGE_TAG}"
sh "docker login ${DOCKER_REGISTER_URL} -u ${DOCKER_REPOSITORY_USERNAME} -p ${DOCKER_REPOSITORY_PASSWORD}"
def statusCode = sh(script:"docker pull ${DOCKER_REMOTE_IMAGE_TAG}", returnStatus:true)
// 判斷該鏡像在倉庫是否存在
if (statusCode != 0) {
sh '''
#!/bin/bash
# build docker image
docker build . -f Dockerfile -t ${DOCKER_IMAGE_TAG}
# tag docker image
docker tag ${DOCKER_IMAGE_TAG} ${DOCKER_REMOTE_IMAGE_TAG}
}
}
echo "Build end"
}
}
stage('Deploy') {
steps{
echo "Deploying begin"
script{
# push to
docker push ${DOCKER_REMOTE_IMAGE_TAG}
# rm
docker rmi ${DOCKER_IMAGE_TAG}
docker rmi ${DOCKER_REMOTE_IMAGE_TAG}
'''
}
echo "Deploy end"
}
}
}
}
pipeline {
agent {
label "default"
}
stages {
stage("檢出") {
steps {
checkout(
[$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]],
userRemoteConfigs: [[url: env.GIT_REPO_URL]]]
)
}
}
stage("環境") {
steps {
sh 'apt install -y apt-transport-https'
sh "curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -"
sh 'echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list'
sh 'cat /etc/apt/sources.list.d/yarn.list'
sh 'apt update && apt install -y yarn'
sh 'yarn --version'
}
}
stage("構建") {
steps {
echo "構建中..."
sh 'yarn add webpack'
sh 'node -v'
}
}
stage("測試") {
steps {
echo "單元測試中..."
}
}
stage("部署") {
steps {
// sh './deploy.sh'
}
}
}
}
進入項目目錄,找到 local.properties 檔案,打開檔案
## This file is automatically generated by Android Studio. # Do not modify this file -- YOUR CHANGES WILL BE ERASED! # # This file should *NOT* be checked into Version Control Systems, # as it contains information specific to your local configuration. # # Location of the SDK. This is only used by Gradle. # For customization when using a Version Control System, please read the # header note. sdk.dir=/Users/neo/Library/Android/sdk
sdk.dir 是 Android SDK 存放目錄,進入該目錄
neo@MacBook-Pro ~ % ll /Users/neo/Library/Android/sdk/ total 0 drwxr-xr-x 3 neo staff 96B Oct 23 09:56 build-tools drwxr-xr-x 18 neo staff 576B Oct 23 09:55 emulator drwxr-xr-x 6 neo staff 192B Oct 23 10:21 extras drwxr-xr-x 3 neo staff 96B Oct 23 11:35 fonts drwxr-xr-x 4 neo staff 128B Oct 23 11:00 licenses drwxr-xr-x 3 neo staff 96B Oct 23 09:55 patcher drwxr-xr-x 19 neo staff 608B Oct 23 09:56 platform-tools drwxr-xr-x 4 neo staff 128B Oct 23 10:23 platforms drwxr-xr-x 24 neo staff 768B Oct 23 10:57 skins drwxr-xr-x 4 neo staff 128B Oct 23 10:23 sources drwxr-xr-x 4 neo staff 128B Oct 24 15:06 system-images drwxr-xr-x 14 neo staff 448B Oct 23 09:55 tools neo@MacBook-Pro ~ % ll /Users/neo/Library/Android/sdk/licenses total 16 -rw-r--r-- 1 neo staff 41B Oct 23 10:23 android-sdk-license -rw-r--r-- 1 neo staff 41B Oct 23 11:00 android-sdk-preview-license neo@MacBook-Pro ~ % cat /Users/neo/Library/Android/sdk/licenses/android-sdk-license d56f5187479451eabf01fb78af6dfcb131a6481e
/Users/neo/Library/Android/sdk/licenses/android-sdk-license 便是當前 Android SDK License 檔案
如果你安裝了多個版本的 SDK,例如 android-26, android-27, android-28 可以看到三行字串。
24333f8a63b6825ea9c5514f83c2829b004d1fee 這是 Android 8.0 - android-26 d56f5187479451eabf01fb78af6dfcb131a6481e 這是 Android 9.0 - android-28
pipeline {
agent any
stages {
stage("Checkout") {
steps {
checkout(
[$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]],
userRemoteConfigs: [[url: env.GIT_REPO_URL]]]
)
}
}
stage("Android SDK") {
steps {
script{
if (fileExists('sdk-tools-linux-4333796.zip')) {
echo 'Android SDK 已安裝'
} else {
echo '安裝 Android SDK'
sh '''
# rm -rf sdk-tools-linux-4333796.* tools platforms platform-tools
wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
unzip sdk-tools-linux-4333796.zip
'''
sh 'yes|tools/bin/sdkmanager --licenses'
//sh 'yes|tools/bin/sdkmanager "platform-tools" "build-tools;26.0.3" "platforms;android-26"' // andorid 8.0
//sh 'yes|tools/bin/sdkmanager "platform-tools" "platforms;android-27"' // andorid 8.1
sh 'yes|tools/bin/sdkmanager "platform-tools" "platforms;android-28"' // andorid 9.0
sh '(while sleep 3; do echo "y"; done) | tools/android update sdk -u'
sh 'tools/bin/sdkmanager --list'
}
}
echo '安裝 Android SDK License'
writeFile(file: 'platforms/licenses/android-sdk-license', text: '''
8933bad161af4178b1185d1a37fbf41ea5269c55
24333f8a63b6825ea9c5514f83c2829b004d1fee
d56f5187479451eabf01fb78af6dfcb131a6481e
''')
sh 'ls -1 platforms'
}
}
stage("Build") {
steps {
echo "構建中..."
sh './gradlew'
echo "構建完成."
}
}
stage("Test") {
steps {
echo "單元測試中..."
sh './gradlew test'
echo "單元測試完成."
//junit 'app/build/test-results/*/*.xml'
}
}
stage("Package") {
steps {
sh './gradlew assemble'
// 收集構建產物
archiveArtifacts artifacts: 'app/build/outputs/apk/*/*.apk', fingerprint: true
}
}
stage("Deploy") {
steps {
echo "部署中..."
// sh './deploy.sh' // 自研部署腳本
echo "部署完成"
}
}
}
}