我正在研究打包和部署 sfdc 代码的管道。我附上以下脚本:
# CI process for SFDX
image: radon57/sfdx-cli #image with sfdx installed
definitions:
steps:
- step: &package_install
name: Package and Install
script:
- apt-get install -y jq
- export PACKAGE_NAME=$( cat sfdx-project.json | jq -r '.packageDirectories[0].package')
- VERSION_NUMBER="$MAJOR_VERSION.$MINOR_VERSION.$PATCH_VERSION.$BUILD_VERSION"
- sfdx force:package:create --name "$PACKAGE_NAME" --description "My Package" --packagetype Unlocked --path force-app --nonamespace --targetdevhubusername $USERNAME || true
# Create a new package version.
#- sfdx force:package:version:create:list --targetusername $USERNAME
- sfdx force:package:version:create -c -v $USERNAME --package "$PACKAGE_NAME" --versionnumber=$VERSION_NUMBER --installationkey $PASSWORD --wait 30 --json > package-output.json || true
- cat package-output.json
- version_data=$(cat package-output.json)
- PKG_VERSION=$( jq -r '.result.SubscriberPackageVersionId' <<< "${version_data}" )
# need to parse out the version from the previous command.
- sfdx force:package:install --package "$PKG_VERSION" --targetusername $USERNAME --wait 10 --publishwait 10 --installationkey $PASSWORD --json -r
pipelines:
default:
- step: *package_install
这个脚本第一次运行良好。当我更新代码并执行管道时,由于唯一的包名称约束,它失败了。
作为解决方案,我绕过了包的创建,只是通过计算版本号来更新包的版本。此方法在本地有效。但由于此管道在容器上运行,因此 sfdx-package.json 不会使用包名称和版本进行更新。所以我必须为每个源更新创建一个新的包名称,这是低效的。
有什么解决方法吗?
管道应该将代码打包并安装在 org 中,如果代码有任何更新,则应将其作为新版本进行推广,而不是作为新包进行推广。