1. 소개
At Rapido Cloud (www.rapido.cloudSalesforce 클라이언트를 위한 모바일 애플리케이션을 개발하고 있습니다. 이 애플리케이션은 Salesforce 클라이언트가 자신의 브랜드를 가진 모바일 애플리케이션을 쉽게 배포할 수 있도록 하며, Salesforce Mobile SDK 또는 Salesforce Mobile Publisher를 사용하는 어려운 루프를 피할 수 있습니다.
I have developed this mobile app on a modern and “standard” platform with widespread components and tools including Ionic 8, Angular 18, TypeScript, Capacitor and now Capgo CapacitorUpdater. These are more simple to handle for clients who do not want to manage Salesforce platform specifics such as Lightning Web Components; and its easier and cheaper for me to recruit developers and maintainers of Ionic + Angular mobile applications.
이 기사에서는 Capgo 및 Capgo Actions를 사용하여 모든 배포를 자동으로 관리하는 __CAPGO_KEEP_1__ CapacitorUpdater의 설계, 선택 및 구현에 대해 설명합니다. 이 모든 것이 __CAPGO_KEEP_1__ CapacitorUpdater의 14일 무료试用 기간 동안 설계, 테스트 및 문서화되었습니다. semantic-release a very successful no-brainer for managing all deployments automatically via Github Actions. All this was designed, tested and documented during the nice 14-day free trial period of Capgo CapacitorUpdater.
Capgo CapacitorUpdater는 Apple AppStore/Google PlayStore 배포 프로세스를 통과하는 것보다 모바일 앱 배포를 더 간단하고 빠르게flexible하게 만들 수 있는 약속에 매료되었습니다. 저는 이전에 웹 앱을 개발했으며 Salesforce Experience Cloud에서 개발했습니다.
Capgo
I는 애플 테스트 플라이트에 앱을 성공적으로 올리기 위해 필요한 학습 곡선을 두려워했지만, 쉽게 앱을 올릴 수 있었다. 나중에 나의 업데이트를 Capgo CapacitorUpdater를 사용하여 더 빠르게 배포할 수 있었다.
My first requirement and test case was to deploy for myself to test my app as a real mobile app on my own phone, instead of testing in a mobile emulator or in a simulator via the Nexus mobile browser suggested by IIonic. That’s because my app uses native features such as Geolocation or accessing the Photo Gallery and Camera. Not having the past experience of testing a Capacitor mobile app, I wasn’t sure if everything was going to work properly : nothing better than to test the real app, in real conditions !
So Capgo CapacitorUpdater helped me update my application on my mobile, live, 1 minute after saving a new feature or fix in my source code : so relieving, and so flexible, and easy to set up !
3. 나의 branch 및 release 모델, 그리고 semantic-release가 어디에 들어가는지
나의 배포를 Capgo 서버에 올리기 위해 나의 CI/CD pipeline에 자동화하고 싶다.
이것은 나의 branch 및 release 모델을 어떻게 구성하는지 설명한다.
모든 애플리케이션, 모바일, 웹, Salesforce 등에 대해
- 개발은 __CAPGO_KEEP_0__ branch에서 수행된다. __CAPGO_KEEP_0__ branch는 개발 branch의 기준이 된다.
feature/...__CAPGO_KEEP_0__ branch는 개발 branch의 기준이 된다.main__CAPGO_KEEP_0__ branch는 개발 branch의 기준이 된다.main__CAPGO_KEEP_0__ branch는 개발 branch의 기준이 된다. - 배포는 릴리스 branch에서 트리거됩니다. 릴리스 branch에서 트리거되는 배포는 다음과 같습니다. 릴리스 branch, prerelease branch, etc.
production또한 고객 또는 컨텍스트에 맞는 branch를 사용하여 커스터마이즈된 배포를 수행할 수 있습니다.alpha,beta,nightly배포는 pull request가 deployment branch로 병합될 때 트리거됩니다. - 릴리스 태그를 관리하는 semantic-release를 사용하여 태그 트리거 배포를 사용하지 않습니다. GitLab Flow의 기본적인 개념입니다.
GitLab Flow

https://faun.dev/c/stories/manuelherrera/git-branching-strategies-in-2022 semantic-release의 동작에 대한 간단한 설명입니다.
릴리스 프로세스에서 semantic-release를 사용하는 방법에 대한 설명입니다.
In __CAPGO_KEEP_0__ 배포 branch에서, semantic-release가 트리거되면, 자동으로 새로운 버전 번호를 계산합니다. 이 버전 번호는 이전 태그의 버전 번호와 __CAPGO_KEEP_0__에 전달된 수정 사항 또는 기능에 따라 결정됩니다. 수정 사항은 새로운 패치 버전을 생성하고, 기능은 새로운 마이너 버전을 생성합니다. 또한 prerelease를 자동으로 포함합니다. alpha, beta, etc. 버전 번호에 포함됩니다.
semantic-release는 conventional commits (https://www.conventionalcommits.org/en/about)를 참조하여 __CAPGO_KEEP_0__에 전달된 커밋에서 changelog를 생성합니다. conventional commits에서 정의된대로 수정 사항과 기능을 그룹화합니다. semantic-release에서 구성된 conventional commits를 참조합니다. 또한 __CAPGO_KEEP_0__에 병합된 pull request와 관련된 이슈에 태그와 릴리즈에 대한 링크를 포함하는 댓글을 업데이트합니다. 마지막으로 이 __CAPGO_KEEP_1__ 릴리즈에서 소스 __CAPGO_KEEP_2__, 바이너리 등과 같은 자산을 첨부합니다.4. semantic-release와 __CAPGO_KEEP_0__에서 branch, release/prerelease, channel
It will also update all your git (Github, in my case) merged pull requests and related issues with comments linking them to the tag and release. Finally, in this Github release, it will attach assets such as source code, binaries if necessary, CHANGELOG.mdsemantic-release가 버전 번호를 생성하도록 원합니다.
Capgo는 conventional commits의 버전을 개발하고 문서화했습니다. conventional commits의 fork된 repo를 참조합니다.
Capgo
__CAPGO_KEEP_0__
Capgo have developed and documented their own version of the “Conventional Commits” standard-version __CAPGO_KEEP_1__ standard-version (https://github.com/Cap-go/standard-version)과 그들의 capacitor-standard-version (https://github.com/Cap-go/capacitor-standard-version)도 capacitor-plugin-standard-version (https://github.com/Cap-go/capacitor-plugin-standard-version) 리포지토리들이다. 그들은 Capgo의 배포에서 사용하는 버전 체계에 대해 블로그에 문서화했다 (https://capgo.app/blog/how-version-work-in-capgo/). 자바스크립트 번들은 'standard' semver 'Semantic Versioning' (https://semver.org)을 따르며 semantic-release )이것도 당연히
그것도 따라한다. 그래서 그것은 정말 좋고, 나에게는 큰 편안감이다. 나는 semantic-release 넓게.
또한, semantic release가 다채널에 앱 배포를 생성하도록 하려면
위에서 설명한 것처럼, prerelease 버전을 branch 등에서 배포해야 하며, 고객 전용 버전도 branch 등에서 배포해야 한다. alpha, beta, nightly 예를 들어, etc. production-customer-jones, production-customer-doe__CAPGO_KEEP_0__은 '채널' 기능을 제공하는데, semantic release도 지원하므로, 이 두 가지를 함께 사용하는 것은 매우 흥미롭다. 또한, XCode Cloud가 관리하는 다채널 빌드와도 잘 맞는다.
Capgo provides the “channels” feature which is exactly what semantic release also supports, so I am excited to make them work together. These also fit in with the different branch builds managed by XCode Cloud (see more about this below).
빌드 번호는 이 branch에서 빌드가 계속되면, 빌드 번호가 증가한다. 1.0.0-alpha.1예를 들어, etc. 이 버전 번호는 explicit하게 문서화되지 않았지만, __CAPGO_KEEP_0__에서 지원되므로, 매우 좋은 소식이다. : semantic release의 채널과 prerelease를 사용하여, __CAPGO_KEEP_1__ 채널을 사용하여 앱의 버전을 __CAPGO_KEEP_0__에서 생성할 수 있다. 1.0.0-alpha.2, etc. Although not documented explicitly, these version numbers are supported by Capgo, which is great news for me : I will use semantic release channels and prerelease to generate versions of my app with Capgo channels.
5. How can I use Capgo to release my application ?
To automate deployment of your app bundles to Capgo, you need to use the Capgo CLI command bundle upload__CAPGO_KEEP_0__은 semantic release와 함께 사용하여 앱을 배포하는 방법에 대해 설명합니다. npx @capgo/cli@latest bundle upload --help 업로드 옵션을 얻기 위해. 그 중에서 사용할 것은 다음과 같습니다.
npx @capgo/cli bundle upload --channel $CHANNEL --apikey $CAPGO_APIKEY --bundle $VERSION --bundle-url $CAPGO_APPID
- CHANNEL은 Capgo에 배포할 채널입니다 (예)
alpha) - VERSION은 semantic release가 생성한 버전입니다 (예)
1.0.0-alpha.1) - CAPGO_APIKEY는 Capgo에서 제공하는 CI/CD pipeline 로그인을 고유하게 식별하는 키입니다.
- CAPGO_APPID는 Capgo에서 제공하는 애플리케이션을 고유하게 식별하는 키입니다 (예)
com.mystartup.mysuperapp)
6. semantic release + Capgo CapacitorUpdate 설정
마지막으로, 이것은 어떻게 모두 연결되는지 궁금하실 것입니다.

semantic release와 Github Actions을 사용하여 빌드한 앱 버전
semantic release 자동화와 Github Actions
semantic release의 매력은 배포 자동화, Github Action 워크플로우의 형태로 매우 간단합니다. 다른 CI/CD 플랫폼에서도 매우 유사하게 보일 것입니다.
# ./github/workflows/release.yml
name: Release
on:
workflow_dispatch:
push:
branches: [alpha, alpha-nocapgo, dev-rupert] # <--- adapt this
env:
CAPGO_APPID: com.mystartup.mysuperapp # <--- adapt this
CAPGO_APIKEY: ${{ secrets.CAPGO_APIKEY }}
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: 24
cache: "npm"
- run: npm install
- run: npx semantic-release
env:
DEBUG: true
GITHUB_TOKEN: ${{ github.token }}
이것은 NodeJS 환경을 설치하고 semantic release를 호출하는 것입니다.
For every branch on a listed in branches, semantic release will trigger a deployment. CAPGO_APIKEY Set in your repository’s secrets. CAPGO_APPID Update your here.
The behavior of semantic release is set in its configuration file. .releaserc.json Here are my settings, explained below :
// .releaserc.json
{
"branches": [
{
"name": "release",
"channel": "production"
},
{
"name": "alpha",
"channel": "alpha",
"prerelease": "alpha"
},
{
"name": "alpha-nocapgo",
"channel": "alpha",
"prerelease": "alpha-nocapgo"
},
{
"name": "dev-rupert",
"channel": "development",
"prerelease": "development"
},
{
"name": "dev-paul",
"channel": "development",
"prerelease": "development"
}
],
"ci": true,
"debug": true,
"dryRun": false,
"repositoryUrl": "https://github.com/RupertBarrow/mysuperapp",
"verifyConditions": ["@semantic-release/github"],
"plugins": [
[
"@semantic-release/commit-analyzer",
{
"preset": "angular",
"releaseRules": [
{ "type": "breaking", "release": "major" },
{ "type": "feat", "release": "minor" },
{ "type": "fix", "release": "patch" },
{ "type": "ci", "release": "patch" },
{ "type": "doc", "release": "patch" },
{ "type": "docs", "release": "patch" },
{ "type": "refactor", "scope": "core-*", "release": "minor" },
{ "type": "refactor", "release": "patch" },
{ "scope": "no-release", "release": false }
]
}
],
"@semantic-release/release-notes-generator",
["@semantic-release/changelog", { "changelogFile": "CHANGELOG.md" }],
[
"@semantic-release/git",
{
"assets": ["package.json", "CHANGELOG.md", "ios/App/App.xcodeproj/project.pbxproj"],
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
}
],
["@semantic-release/github", { "assets": ["CHANGELOG.md"] }],
[
"@semantic-release/exec",
{
"prepareCmd": "npm run build",
"publishCmd": "npm add -D @capgo/cli && npx @capgo/cli bundle upload --channel ${branch.channel} --apikey $CAPGO_APIKEY --bundle ${nextRelease.version} --bundle-url $CAPGO_APPID"
}
]
]
}
branches:branchessets the configuration of branches (name), mapped to the Capgo channel (channel) and how the prerelease version number will be called (prerelease). For example, ifbranch.prerelease = "development", the version number generated by semantic release will bex.y.z-development.n- deployments to the
alpha그리고alpha-nocapgobranch는 모두 __CAPGO_KEEP_0__에 앱을 배포하지만alpha다른 prerelease 이름이 버전 번호에 포함된 - 개발자 branch에 배포하는
dev-rupert또는dev-paulbranch는 모두 __CAPGO_KEEP_0__에 배포하지만developmentchannel on Capgo, all with the samedevelopment개발자 branch에 배포하는
verifyConditions: in the first stage of semantic release, it checks that it has the correct access to Github. I hope to add an authentication check for the Capgo CLI here later@semantic-release/commit-analyzer__CAPGO_KEEP_0__에 배포하는github에 배포하는)@semantic-release/release-notes-generator__CAPGO_KEEP_0__에 배포하는CHANGELOG.md@semantic-release/git: Ionic 빌드와 semantic release 작업에 의해 업데이트된 파일을 커밋합니다.package.json,CHANGELOG.md그리고ios/App/App.xcodeproj/project.pbxproj- 아직 안드로이드 빌드를 하지 않습니다.@semantic-release/github: 파일을 __CAPGO_KEEP_0__ 릴리스에 첨부합니다.CHANGELOG.mdfile to the Github release as an asset@semantic-release/exec) 그리고 __CAPGO_KEEP_0__ 서버에 앱 번들을 효과적으로 배포합니다.prepareCmd버전 번호를 계산하고 증가시키는 방법, 변경 로그를 생성하는 방법, Capgo 태그 또는 릴리스를 생성하는 방법에 대한 설명은 없습니다. : semantic release가 기본적으로 모든 것을 처리하며 최소한의 구성으로 모든 것이 처리됩니다.publishCmd)
You will notice that their is no fiddling around with explaining how we want the version number to be calculated and incremented, how we need to generate a changelog, a Github tag or release, etc. : everything is handled by default by semantic release, with minimal configuration.
XCode Cloud와 통합하여 애플리케이션 바이너리의 새로운 버전을 빌드하는 것은 간단합니다. (Google Play에 배포하지 않지만, 그 빌드는 유사합니다.) :
XCode Cloud 프로세스를 설정하여 특정 branch에서 변경이 발생할 때 빌드를 트리거합니다.
- 이 branch에서, XCode Cloud를 설정하여 해당 branch에서 변경이 발생할 때만 빌드를 트리거합니다.
production) - on this branch, I set XCode Cloud to build only when the
CHANGELOG.md파일이 업데이트되었습니다. 이 파일은 각 버전이 생성된 후에 업데이트됩니다. - 다양한 채널을 위해 배포를 시뮬레이션하기 위해 다양한 branch에서 빌드를 트리거할 수 있습니다. XCode Cloud에서 빌드를 구성하는 각 구성에서, 나는 __CAPGO_KEEP_0__ 채널의 값을 수동으로 환경 변수로 설정합니다.
branch.channel설정된 값입니다.releaserc.json(네, 이것은 수동 복제입니다) 그리고 나중에, 나는 각 사용자 지정 고객 애플리케이션을 사용하여 사용자 지정 릴리스 branch에서 배포한 각 사용자 지정 애플리케이션에 대해 다른 AppStore 애플리케이션을 배포할 수 있습니다.

Capgo 채널에서 XCode Cloud에서 앱 바이너리 빌드를 수행합니다.
결론
결론적으로, 나는 Capgo CapacitorUpdater를 내 표준 semantic release pipeline에 통합할 수 existed하여 14일 무료试用 기간 내에 빠르게 통합할 수 있었으며, 결과는 다음과 같습니다.
- Capgo 서버와 호환되는 자동으로 생성되는 버전 번호입니다.
- semantic release automatically deploys Capgo application bundles, also making use of Capgo channels
- __CAPGO_KEEP_1__ 채널을 사용하여도 됩니다.
이것은 앱 바이너리 빌드의 XCode Cloud 빌드와 잘 맞습니다. 다음 단계는 Capgo Builder의 Native Build Builder Credit Next입니다.
현재 이 앱의 개발 단계에 있습니다. iOS용으로 테스트 플라이트를 통해 빠르게 테스트자에게 제공할 것입니다. Capgo의 힘을 고려하여, 무료 버전의 앱을 테스트를 위해 앱 스토어에 배포할 것입니다. 테스트 중에는 Capgo로 정기적으로 업데이트될 것입니다. 그 다음에 앱 스토어에 또 다른(유료) 버전의 앱을 배포하고, 또 다른 레코드 아래에 배포하고, 테스트 중에는 Capgo로 정기적으로 업데이트할 것입니다.
테스트를 위해 앱 스토어에 배포할 무료 버전의 앱을 업데이트하는 Capgo에 대한 더 나은 빌드 전 검증을 추가하길 바랍니다. bundle upload Ionic + Angular + __CAPGO_KEEP_0__로 개발된 미래의 모바일 앱에 대해, 나는 이제 더 이상 깨끗하고 단순하며 reproducible한 semantic release pipeline을 가지고 있습니다.
I now have a clean, simple an reproducible semantic release pipeline for future mobile apps developed with Ionic + Angular + Capacitor.
22년 이상의 Salesforce 경험을 가지고 있습니다. Salesforce의 고객이자 사용자, 파트너이자 통합자, 아키텍트, 개발자, 비즈니스 분석가, 컨설턴트로, Salesforce의 성공적인 파트너인 프랑스의 Altius Services의 COO 및 CTO로 13년 동안 공동 설립 및 공동 관리했습니다. 그리고 새로운 모험을 시작하여 Salesforce 솔로 프레너로서, Rapido Cloud의 제품을 제공하는 데에
링크드인에서 나를 찾으실 수 있습니다. https://linkedin.com/in/rbarrow Rapido Cloud의 Salesforce 제품을 확인하시려면
https://www.rapido-companion.app 링크드인에서 나를 찾으실 수 있습니다..
https://linkedin.com/in/rbarrow Rapido Cloud의 Salesforce 제품을 확인하시려면 및 https://www.rapido.cloud (개발 중입니다).
Capgo의 Capgo CapacitorUpdater와 함께 How Rapido Cloud가 의미론적 릴리스를 관리하는 방법
Capgo의 __CAPGO_KEEP_0__ CapacitorUpdater를 사용하는 경우 Capgo의 Capgo CapacitorUpdater와 함께 How Rapido Cloud가 의미론적 릴리스를 관리하는 방법 Capgo의 __CAPGO_KEEP_0__ CapacitorUpdater와 함께 의미론적 릴리스를 관리하는 방법 Capgo의 Capgo Live Updates와 함께 제품 워크플로를 관리하는 방법 for the product workflow in Capgo Live Updates, Capgo의 __CAPGO_KEEP_0__ Live Updates와 함께 제품 워크플로를 관리하는 방법 기능 Capgo의 __CAPGO_KEEP_0__ Live Updates Capgo의 Capacitor Updater와 함께 Semantic Release 관리하는 방법 업데이트 동작 업데이트 동작의 구현 세부 사항, 그리고 업데이트 유형 업데이트 유형의 구현 세부 사항.