1. 소개
Rapido Cloud (www.rapido.cloud)에서 Salesforce 고객을 위한 모바일 애플리케이션을 개발하고 있습니다. 이 애플리케이션은 Salesforce 고객이 자신의 브랜드화된 모바일 애플리케이션을 쉽게 배포할 수 있도록 해 주며, Salesforce Mobile SDK 또는 Salesforce Mobile Publisher를 사용하는 어려운 루프를 피할 수 있습니다.
이 모바일 애플리케이션은 Ionic 8, Angular 18, TypeScript, Capacitor 및 Capgo CapacitorUpdater와 같은 현대적이고 표준화된 플랫폼에 개발되었습니다. 이러한 구성 요소와 도구는 Salesforce 플랫폼의 특정 사항을 관리하지 않아도 되며, Lightning Web Components와 같은 Salesforce 플랫폼의 특정 사항을 관리하지 않아도 되므로 클라이언트에게 더 쉽게 관리할 수 있습니다. 또한 Ionic + Angular 모바일 애플리케이션을 개발하고 유지 관리하는 데 필요한 개발자와 유지 관리자들을 더 쉽게 채용하고 유지할 수 있습니다.
이 글은 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.
2. Why use Capgo ? Why use semantic-release ?
Capgo CapacitorUpdater는 애플리케이션 배포를 훨씬 더 간단하고 빠르게, 유연하게 처리할 수 있는 약속으로 나를 끌어들였다. 애플리케이션을 스토어에 푸시하는 첫 번째 모바일 애플리케이션으로, 이전에는 웹 앱에 집중하여 Salesforce Experience Cloud에서 개발했다.
배포를 위한 학습 곡선에 대한 두려움을 가지고 있었지만, 애플리케이션을 Apple TestFlight에 쉽게 올릴 수 있었다. 그 후에 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 !
Capgo CapacitorUpdater는 내 애플리케이션을 스마트폰에서 업데이트하는 것을 도왔다. 소스 code에서 새로운 기능이나 수정을 저장한 후 1분 만에 업데이트를 완료할 수 있었다. 매우 편리하고 유연하며 쉽게 설정할 수 있었다.
3. Branching 및 Release 모델, 그리고 semantic-release의 위치
이제 Capgo 서버로의 배포가 정상적으로 작동하고 있으므로, CI/CD pipeline에 자동화하고 통합해야 한다.
이것은 어떻게 나는 CapGo CapacitorUpdater와 함께 의미있는 릴리스를 관리하는지 설명합니다.
모바일, 웹 또는 Salesforce를 위한 모든 애플리케이션에 대해 :
- 개발 는
feature/...branchmain에서 수행됩니다.main그리고 그들은 - 로 병합됩니다. 그것은 개발 branch의 대부분의 경우, 유지보수 및 특정 기능을 위한 커스터마이즈된 배달에 대한 경우를 제외하고 배포는
production릴리스 branch에서 트리거됩니다.alpha,beta,nightly그것은 다음과 같은 것들일 수 있습니다 : - Capgo를 사용하여 Capacitor Updater와 함께 Semantic Release를 관리하는 방법 Pull Request가 Deployment Branch로 병합될 때 트리거가 됩니다. 태그 트리거된 배포를 사용하지 않습니다. 왜냐하면 Semantic Release가 태그와 나머지 모든 것을 관리하기 때문입니다.
GitLab Flow는 다음과 같습니다.

GitLab Flow - source https://faun.dev/c/stories/manuelherrera/git-branching-strategies-in-2022
Semantic Release의 작동 방식에 대한 주의사항
Deployment Branch에서 Semantic Release가 트리거될 때, 이전 태그의 버전 번호와 제공된 수정 사항 또는 기능에 따라 자동으로 새로운 버전 번호를 계산합니다. 수정 사항은 패치 버전을 생성하고, 기능은 마이너 버전을 생성합니다. 또한 prerelease도 자동으로 포함됩니다. alpha, betaSemantic Release는 커밋에서 변경 로그를 생성하고, conventional commits(see https://www.conventionalcommits.org/en/about)에서 정의된修정 및 기능을 그룹화합니다.
https://www.conventionalcommits.org/en/about https://faun.dev/c/stories/manuelherrera/git-branching-strategies-in-2022https://www.conventionalcommits.org/en/about
Capgo는 또한 git (Github, 나의 경우) 병합된 pull 요청과 관련된 이슈를 업데이트하고 태그 및 릴리즈에 대한 댓글을 연결하는 댓글과 함께 업데이트합니다. 마지막으로 이 Github 릴리즈에서 소스 code, 바이너리와 같은 자산을 첨부합니다. CHANGELOG.md, etc.
4. semantic release와 Capgo에서 branch, release/prerelease, channel
Capgo는 Capgo 배포에 대해 semantic release가 다음을 수행하도록 원하는 것입니다.
Capgo는 버전 번호를 생성하길 원합니다.
Capgo는 "Conventional Commits"의 "표준 버전"을 개발하고 문서화했습니다. standard-version Capgo는 fork된 저장소와 함께 "표준 버전"의 __CAPGO_KEEP_1__ 버전도 개발하고 문서화했습니다. standard-version (Capgo는 github.com/Cap-go/standard-versionCapgo는 __CAPGO_KEEP_0__.com/Cap-go/__CAPGO_KEEP_1__-standard-version capacitor-standard-version (Capgo는 github.com/Cap-go/capacitor-plugin-standard-versionhttps://__CAPGO_KEEP_0__.com/Cap-go/__CAPGO_KEEP_1__-plugin-standard-version capacitor-plugin-standard-version (https://github.com/Cap-go/capacitor-standard-version ) 저장소들. 그들은 블로그에 버전 스킴을 사용하는 Capgo의 배포에 대해 문서화했습니다 (https://capgo.app/blog/how-version-work-in-capgo/) 자바 스크립트 번들을 따라 '표준' semver 'Semantic Versioning' (https://semver.org) 이 또한 (물론입니다 !) semantic-release So 그게 좋고, 나에게는 큰 편안함입니다. 나는 __CAPGO_KEEP_0__를
extensively 사용합니다. semantic-release 또한, semantic release가 다양한 채널에서 앱 배포를 생성하도록 하려면
위에서 언급한 것처럼, prerelease 버전을 branch such as
등에서 배포해야 하며, 고객 전용 버전을 branch such as alpha, beta, nightly 등에서 배포해야 합니다. production-customer-jones, production-customer-doe, etc.
Capgo은 "Capgo" 기능을 제공하며, 이 기능은 semantic release도 지원하는 기능이기 때문에 이들을 함께 사용할 수 있는 기대감을 느끼고 있습니다. 이 기능은 XCode Cloud가 관리하는 다양한 branch builds와도 잘 맞습니다. (아래에 더 자세히 설명하겠습니다.)
semantic release가 prereleases에서 생성하는 Semver 버전 번호는 다음과 같습니다. 1.0.0-alpha.1. 이 branch에서 연속적으로 빌드가 진행되면 build 번호가 증가합니다. 1.0.0-alpha.2, etc. 이 버전 번호는 explicit하게 문서화되지 않았지만 Capgo에서 지원하고 있으므로, 저는 semantic release의 channels와 prerelease를 사용하여 Capgo 채널을 통해 앱의 버전을 Capgo에서 생성할 수 있습니다.
5. Capgo을 사용하여 애플리케이션을 릴리즈하는 방법은 무엇입니까?
Capgo 앱 번들을 자동으로 업로드하기 위해서는 Capgo CLI 명령어를 사용해야 합니다. bundle upload. 이 명령어를 사용하면 업로드 옵션을 여러 개 제공합니다. 그 중에서 다음 옵션을 사용하겠습니다. npx @capgo/cli@latest bundle upload --help CHANNEL은 __CAPGO_KEEP_0__에 업로드할 채널을 지정합니다 (예를 들어)
npx @capgo/cli bundle upload --channel $CHANNEL --apikey $CAPGO_APIKEY --bundle $VERSION --bundle-url $CAPGO_APPID
- CHANNEL is the Capgo channel to which we want to deploy (eg
alpha) - __CAPGO_KEEP_0___APIKEY는 __CAPGO_KEEP_1__에서 제공하는 CI/CD pipeline 로그인을 위한 고유한 키입니다 (예를 들어)
1.0.0-alpha.1) - CAPGO_APPID는 Capgo에서 제공하는 애플리케이션을 위한 고유한 ID입니다 (예를 들어)
- CAPGO_APPID is provided by Capgo to uniquely identify your application (eg
com.mystartup.mysuperapp)
6. Capgo CapacitorUpdate 설정
마지막으로, 이것은 어떻게 모두가 연결되는가?

semantic release와 Github Actions을 사용하여 빌드한 앱 버전
Github Actions을 사용한 semantic release 자동화
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를 호출합니다.
리스트된 branch의 모든 머지에 대해 semantic release는 배포를 트리거합니다.
설정 branchesrepository의 비밀에
업데이트 CAPGO_APIKEY 여기. CAPGO_APPID semantic release의 동작은 __CAPGO_KEEP_0__에 설정됩니다.
__CAPGO_KEEP_0__ CapacitorUpdate 설정 .releaserc.json 설정 파일입니다.
아래 설정은 설명합니다 :
// .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:branchesbranch의 설정 (name), Capgo 채널 (channel)과 prerelease 버전 번호가 호출되는 방법을 설정합니다 (prerelease). 예를 들어, 만약branch.prerelease = "development"semantic release가 생성한 버전 번호는x.y.z-development.n- 개발자 채널로
alpha개발자 채널로alpha-nocapgo개발자 채널로alpha개발자 채널로 - 개발자 채널로
dev-rupert개발자 채널로dev-paulCapgo의 Capacitor Updater를 사용하여 의미있는 릴리즈를 관리하는 방법developmentchannel on Capgo, all with the samedevelopment__CAPGO_KEEP_0__ 채널에 모든 것이 동일한 prerelease 키워드가 포함된 버전 번호와 함께 배포됩니다.
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첫 번째 의미있는 릴리즈 단계에서, semantic release는 __CAPGO_KEEP_0__에 대한 올바른 접근 권한이 있는지 확인합니다.https://github.com/semantic-release/semantic-release?tab=readme-ov-file#commit-message-format)@semantic-release/release-notes-generator기본적인 의미있는 릴리즈 기능 - 자세한 내용은 문서를 참조하세요.CHANGELOG.md@semantic-release/githttps://__CAPGO_KEEP_0__.com/semantic-release/semantic-release?tab=readme-ov-file#commit-message-formatpackage.json,CHANGELOG.md변경 로그 파일을 생성합니다.ios/App/App.xcodeproj/project.pbxprojIonic 빌드와 의미있는 릴리즈 작업으로 업데이트된 파일을 포함하여 다음 파일을 커밋합니다.@semantic-release/github그리고CHANGELOG.mdfile to the Github release as an asset@semantic-release/exec: 이 2 개의 명령어를 사용하여 앱 빌드 준비를 하세요 (prepareCmd) 그리고 Capgo 서버에 앱 번들 효과적으로 빌드 및 배포하세요 (publishCmd)
버전 번호를 계산하고 증가시키는 방법, 변경 로그를 생성하는 방법, Github 태그 또는 릴리스와 같은 모든 설정에 대해 설명하는 것을 피할 수 있습니다. : semantic release가 기본적으로 모든 것을 처리하며 최소한의 구성만 필요합니다.
XCode Cloud에서 새로운 바이너리 빌드
XCode Cloud와의 통합을 통해 애플리케이션 바이너리 새로운 버전을 빌드하는 것은 간단합니다 (Google Play로 배포하지 않았지만, 그 빌드는 유사해야 합니다) :
- XCode Cloud 프로세스를 설정하여 특정 branch에서 변경이 발생할 때 빌드를 트리거합니다 (예를 들어
production) - 이 branch에서, XCode Cloud는 파일이 업데이트된 경우에만 빌드를 트리거합니다. 이 파일은 semantic release가 생성한 각 버전 후에 업데이트됩니다.
CHANGELOG.md다른 채널에 대한 배포를 시뮬레이션하기 위해 다른 branch에서 빌드를 트리거할 수 있습니다. 각 XCode Cloud 빌드 구성에서, 나는 branch 별로 환경 변수를 수동으로 설정하여 __CAPGO_KEEP_0__ 값을 설정합니다. 그리고 만약에, 나는 각 커스터마이즈드 릴리스 branch에 대해 다른 AppStore 애플리케이션을 배포할 수 있습니다. - XCode Cloud에서 __CAPGO_KEEP_0__ 채널을 사용하여 앱 바이너리 빌드
branch.channelXCode Cloud에서 새로운 바이너리 빌드releaserc.jsonXCode Cloud와의 통합을 통해 애플리케이션 바이너리 새로운 버전을 빌드하는 것은 간단합니다 (Google Play로 배포하지 않았지만, 그 빌드는 유사해야 합니다) :

XCode Cloud에서 Capgo 채널을 사용하여 앱 바이너리를 빌드합니다.
7. 결론
Capgo CapacitorUpdater를 내 표준 의미적 릴리스 PIPE라인에 통합할 수 existed하여 14일 무료 시험 기간 내에 빠르게 통합할 수 existed하여 결과는 다음과 같습니다.
- Capgo 서버와 호환되는 의미적 릴리스 버전 번호가 자동으로 생성됩니다.
- 의미적 릴리스는 Capgo 애플리케이션 번들을 자동으로 배포하며 Capgo 채널도 사용합니다.
- 이것은 XCode Cloud 애플리케이션 바이너리 빌드와 잘 맞습니다.
다음 단계
현재 이 앱의 개발 단계에 있습니다. 테스트를 위해 iOS에서 TestFlight을 통해 빠르게 앱을 제공할 예정입니다. Capgo의 강력함을 고려하여 앱의 무료 버전을 AppStore에 배포할 예정이며, 테스트 중에는 Capgo로 정기적으로 업데이트할 예정입니다. 또한 AppStore에 다른 레코드로 (유료) 앱을 배포하고, 테스트 중에는 Capgo로 정기적으로 업데이트할 예정입니다.
I hope to add better pre-build verification of Capgo bundle upload 앱의 배포 전 __CAPGO_KEEP_0__의 전제 조건을 의미적 릴리스 구성에 추가할 예정입니다.
Ionic + Angular + Capacitor로 개발된 미래의 모바일 앱에 대해 내게는 의미적 릴리스 PIPE라인이 깨끗하고 간단하며 reproducible합니다.
작성자 - Rupert Barrow
22년 이상 Salesforce 경험을 가지고 있습니다. 클라이언트와 사용자, 파트너와 통합자, 아키텍트, 개발자, 비즈니스 분석가 및 컨설턴트로 다양한 역할을 수행했습니다. Altius Services의 공동 설립자이자 13년 동안 COO와 CTO로 활동했습니다. 프랑스에서 성공적인 Salesforce SI 파트너로 활동한 후 새로운 모험을 시작했습니다. Rapido Cloud 링크드인에서 나를 찾으세요.
https://linkedin.com/in/rbarrow Rapido Cloud의 Salesforce 제품을 확인하세요..
https://www.rapido-companion.app 그리고 https://www.rapido.cloud (개발 중입니다). How Rapido Cloud가 __CAPGO_KEEP_0__ CapacitorUpdater를 사용하여 Semantic Release를 관리하는지 계속 읽어보세요.
Keep going from How Rapido Cloud manage Semantic Release with Capgo CapacitorUpdater
CapacitorUpdater를 사용하는 경우 How Rapido Cloud Capgo CapacitorUpdater을 사용하여 의미론적 릴리스를 관리하는 방법 __CAPGO_KEEP_0__ Live Updates와 연결하여 Capgo Live Updates Capgo Live Updates를 위한 제품 워크플로 __CAPGO_KEEP_0__ Live Updates 개요 __CAPGO_KEEP_0__ Live Updates 구현 세부 사항 __CAPGO_KEEP_0__ Live Updates 기능 __CAPGO_KEEP_0__ Live Updates 업데이트 동작 __CAPGO_KEEP_0__ Live Updates 업데이트 유형 __CAPGO_KEEP_0__ CapacitorUpdater __CAPGO_KEEP_0__ Live Updates __CAPGO_KEEP_0__ Live Updates