欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【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·配置流程

  1. 创建 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

  1. 本地安装 Salesforce CLI / Git / OpenSSL(Windows环境)
  2. 用Salesforce CLI认证DevHub环境
sfdx force:auth:web:login --setalias DevHub --setdefaultdevhubusername
  1. 创建GitLab工程,并Clone到本地
  2. 创建私有键和数字签名,实现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)
  1. 在项目中建一个任意文件夹,将server.key.enc保存到该文件夹,并push到GitLab
  2. 在SalesForce的 App Manager 设定中,打开【Use digital signatures】,将数字签名文件上传上去(server.csr)
  3. 在GitLab的项目设定中,选择CI/CD,定义通信用变量
变量
PACKAGE_NAME 可任意,推荐APP名
SERVER_KEY_PASSWORD 上面创建认证签名文件server.key.enc时的密码
SF_CONSUMER_KEY SF 通信APP中生成的【The Consumer Key】
SF_USERNAME 登录组织环境的用户
  1. 通信测试
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即可
  1. 创建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. 至此,环境完成。

开发流程

  • 开发手顺
  1. 从GitLab中获取数据源
  2. 用Salesforce CLI创建自己的开发用scratch组织
  3. 用Salesforce CLI或者VSCode等开发工具进行程序上的改变
  4. 登录scratch组织在页面实现宣言型的改变
  5. 使用CLI或者VSCode等工具拉取组织上的改变到本地
  6. push变化到GitLab
  7. 等待pipeline自动运行(测试,创建新的package到sandbox环境或者生产环境)
  • 基本示意图
    【Procedure】GitLab + SalesForce 实现CI/CD

主要命令

  • 创建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