【Procedure】GitLab + SalesForce 实现CI/CD
程序员文章站
2022-05-19 13:43:18
...
【Procedure】GitLab + SalesForce 实现CI/CD
前提条件
- Enable Dev Hub
- Enable Unlocked Packages and Second-Generation Managed Packages
CI·CD·配置流程
- 创建 Salesforce Connected App 用来与GitLab交流
- OAuth有效(Enable OAuth Settings)
- Callback URL: (http://localhost:1717/OauthRedirect)
- 选择可用Scopes
– Access and manage your data (api)
– Perform requests on your behalf at any time (refresh_token, offline_access)
– Provide access to your data via the Web (web) - Require Secret for Web Server Flow 有效化
- 授权被认证用户的连接
✳ 具体参照Create a Connected App
- 本地安装 Salesforce CLI / Git / OpenSSL(Windows环境)
- 用Salesforce CLI认证DevHub环境
sfdx force:auth:web:login --setalias DevHub --setdefaultdevhubusername
- 创建GitLab工程,并Clone到本地
- 创建私有键和数字签名,实现GiltLab和SF的通信
cd certificates
openssl genrsa -des3 -passout pass:*SomePassword* -out server.pass.key 4096 (创建私有键)
openssl rsa -passin pass:*SomePassword* -in server.pass.key -out server.key
set OPENSSL_CONF=C:\PathToOpenSSL\openssl.cnf (Windows环境时)
openssl req -new -key server.key -out server.csr (生成数字签名文件请求)
openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt (生成365天期限的自认证数字签名)
openssl enc -aes-256-cbc -md sha256 -salt -e -in server.key -out server.key.enc -k *SomePassword* -pbkdf2 (加密该文件为server.key.enc,为了安全上传到GitLab)
- 在项目中建一个任意文件夹,将server.key.enc保存到该文件夹,并push到GitLab
- 在SalesForce的 App Manager 设定中,打开【Use digital signatures】,将数字签名文件上传上去(server.csr)
- 在GitLab的项目设定中,选择CI/CD,定义通信用变量
变量 | 值 |
---|---|
PACKAGE_NAME | 可任意,推荐APP名 |
SERVER_KEY_PASSWORD | 上面创建认证签名文件server.key.enc时的密码 |
SF_CONSUMER_KEY | SF 通信APP中生成的【The Consumer Key】 |
SF_USERNAME | 登录组织环境的用户 |
- 通信测试
sfdx force:auth:logout --targetusername DevHub --noprompt
sfdx force:auth:jwt:grant --clientid <INSERT CONSUMER KEY HERE> --jwtkeyfile server.key所在相对路径 --username <INSERT YOUR USERNAME HERE> --setdefaultdevhubusername --setalias DevHub
sfdx force:auth:list ????认证方法里出现JWT即可
- 创建Unlocked Package
sfdx force:package:create --path force-app --name "同上面PACKAGE_NAME的值" --description "GitLab CI Package Example" --packagetype Unlocked
系统自动更新了本地的sfdx-project.json 文件
12. 将JSON文件push到Gitlab
13. 在GitLab中创建 .gitlab-ci.yml 文件用来实现CI/CD,参照Create and Run a GitLab Pipeline
14. 至此,环境完成。
开发流程
- 开发手顺
- 从GitLab中获取数据源
- 用Salesforce CLI创建自己的开发用scratch组织
- 用Salesforce CLI或者VSCode等开发工具进行程序上的改变
- 登录scratch组织在页面实现宣言型的改变
- 使用CLI或者VSCode等工具拉取组织上的改变到本地
- push变化到GitLab
- 等待pipeline自动运行(测试,创建新的package到sandbox环境或者生产环境)
- 基本示意图
主要命令
- 创建scratch组织
sfdx force:org:create --setalias DevOrg --setdefaultusername --definitionfile config/project-scratch-def.json --wait 10 --targetdevhubusername DevHub
- push本地meta数据到scratch组织(本地作业目录下)
sfdx force:source:push
- 授权到scratch的缺省用户
sfdx force:user:permset:assign --permsetname XXXAppName
- 做一些程序上改变(只是示例)
sfdx force:data:tree:import --plan data/sample-data-plan.json
- 打开scratch的url
sfdx force:org:open
- 拉取宣言型的改变内容到本地
sfdx force:source:pull
- commit本地变化到GitLab仓库
git add .
git commit -m "Updated property finder page"
git push -u origin master
推荐阅读
-
Jenkins 结合 Docker 为 .NET Core 项目实现低配版的 CI&CD
-
Gitlab Pipeline+Supervisor Python项目CI/CD实战 (二)
-
Gitlab Pipeline+Supervisor Python项目CI/CD环境搭建(一)
-
使用GitLab+Jenkins实现持续集成CI环境的示例代码
-
jenkins基于gitlab实现CI/CD
-
Gitlab CI/CD
-
【Procedure】GitLab + SalesForce 实现CI/CD
-
gitlab CI/CD环境搭建
-
Azure DevOps+Docker+Asp.NET Core 实现CI/CD(一 .简介与创建自己的代理池)
-
再不用Gitlab的CI/CD功能,你就out了