Jenkins/fastlane - 未找到本地代码签名身份
Jenkins/fastlane - There are no local code signing identities found
我在使用 Jenkins 的 fastlane 方面遇到问题。
Runing this command in terminal works fastlane provide_crashlytics_build testing:false check_xcode:false --env xxx
, but from Jenkins not working
错误信息:
There are no local code signing identities found.
You can run `security find-identity -v -p codesigning` to get this output.
This Stack Overflow thread has more information:
(Check in Keychain Access for an expired WWDR certificate: has more info.)
[14:03:30]: No certificates for filter: Certificate ID: '7D72F7MC75'
[14:03:30]: something bad happened: Could not find a matching code signing identity for type 'AdHoc'.
快车道版本 2.141.0
追踪步骤:
- 我运行这个命令
security find-identity -v -p codesigning
结果如下:2 valid identities found
- 我检查了 Apple Worldwide Developer 证书及其有效和可信
- 我检查了 Keychain 和 Apple Developer 帐户中的分发证书,它们都在那里
这里是 Jenkins 执行 Shell:
#!/bin/zsh
export TERM=xterm-256color
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export GIT_TRACE_PACKET=1
export GIT_CURL_VERBOSE=1
source /Users/Shared/Jenkins/.rvm/scripts/rvm
rvm use 2.6.3
fastlane provide_crashlytics_build testing:false check_xcode:false --env xxx
这里是 faslane 车道:
########## Upload testbuild to crashlytics ##########
desc "Upload testbuild to crashlytics"
lane :provide_crashlytics_build do |options|
if options[:check_xcode]
verify_xcode
end
if options[:add_badge]
if ENV['DARK_BADGE']
badge(dark: true)
else
badge
end
end
build_preparations
if options[:testing]
start_tests
end
pem
match(
type: "adhoc",
app_identifier: [ENV['APP_IDENTIFIER'], ENV['APP_NOTIFICATION_EXTENSION_IDENTIFIER']],
force_for_new_devices: true
)
gym(
xcargs: "ARCHIVE=NO",
output_name: "#{ENV['OUTPUT_NAME_TESTING']}"
)
verify_build(
provisioning_type: 'distribution',
bundle_identifier: ENV['APP_IDENTIFIER']
)
version = get_ipa_info_plist_value(ipa: "#{ENV['OUTPUT_NAME_TESTING']}.ipa", key: "CFBundleShortVersionString")
crashlytics(
api_token: ENV['CRASHLYTICS_API_TOKEN'],
build_secret: ENV['CRASHLYTICS_BUILD_SECRET'],
emails: ENV['CRASHLYTICS_EMAILS'],
notifications: false,
notes: "#{change_log_last_five_commits}"
)
if ENV['SLACK_URL']
sh ("say 'Yippee! What a awsome day. Thanks to #{lastCommitAuthor} something great happend. A new build is born.'")
slack(
message: "New crashlytics build of #{ENV['SCHEME']} v.#{version}(#{build})",
channel: "#{ENV['SLACK_CHANNEL']}",
success: true,
use_webhook_configured_username_and_icon: true,
default_payloads: [],
payload: {
'Release Notes' => change_log_last_five_commits
}
)
end
clean_build_artifacts
end
这是快速通道日志:
Summary for match 2.141.0 |
+----------------------------+---------------------------------------------------------------------------------------+
| type | adhoc |
| app_identifier | ["xxxxxxxxxxxxxxxxxxxxxxxx", "xxxxxxxxxxxxxxxxxxxxxxxx.NotificationServiceExtension"] |
| force_for_new_devices | true |
| readonly | false |
| generate_apple_certs | false |
| skip_provisioning_profiles | false |
| username | xxxxxxxxxxxxxxx |
| team_id | R2Q6VXW97P |
| team_name | xxxxxxxxxxxxxxxxxxxxxxxxx |
| storage_mode | git |
| git_url | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| git_branch | master |
| shallow_clone | false |
| clone_branch_directly | false |
| keychain_name | login.keychain |
| force | false |
| skip_confirmation | false |
| skip_docs | false |
| platform | ios |
| verbose | false |
+----------------------------+---------------------------------------------------------------------------------------+
+-------------------+-------------------------------------------------------------+
| Installed Certificate |
+-------------------+-------------------------------------------------------------+
| User ID | R2Q6VXW97P |
| Common Name | iPhone Distribution: xxxxxxxxxxxxxxxxxxxxxxxxx (R2Q6VXW97P) |
| Organisation Unit | R2Q6VXW97P |
| Organisation | xxxxxxxxxxxxxxxxxxxxxxxxx |
| Country | US |
| Start Datetime | 2020-02-04 11:56:01 UTC |
| End Datetime | 2021-02-03 11:56:01 UTC |
+-------------------+-------------------------------------------------------------+
+-------------------------------------+--------------------------------------+
| Summary for sigh 2.141.0 |
+-------------------------------------+--------------------------------------+
| app_identifier | xxxxxxxxxxxxxxxxxxxxxxxxx |
| username | xxxxxxxxxxxxxxxxxxxxxxxxx |
| force | false |
| cert_id | 7D72F7MC75 |
| provisioning_name | match AdHoc xxxxxxxxxxxxxxxxxxxxxxxx |
| ignore_profiles_with_different_name | true |
| team_id | R2Q6VXW97P |
| team_name | xxxxxxxxxxxxxxxxxxxxxxxxx |
| platform | ios |
| adhoc | true |
| developer_id | false |
| development | false |
| skip_install | false |
| skip_fetch_profiles | false |
| skip_certificate_verification | false |
| readonly | false |
+-------------------------------------+--------------------------------------+
解决方案
- 正如@Scriptable 在他的评论中所说:
Because the Jenkins service runs like a daemon, it cannot access the login keychain, it uses the system keychain. Please make sure that your signing certificates are in the system keychain and see if this helps your issue.
- 证书从未设置为始终信任,它必须是使用系统默认值
我在使用 Jenkins 的 fastlane 方面遇到问题。
Runing this command in terminal works
fastlane provide_crashlytics_build testing:false check_xcode:false --env xxx
, but from Jenkins not working
错误信息:
There are no local code signing identities found.
You can run `security find-identity -v -p codesigning` to get this output.
This Stack Overflow thread has more information:
(Check in Keychain Access for an expired WWDR certificate: has more info.)
[14:03:30]: No certificates for filter: Certificate ID: '7D72F7MC75'
[14:03:30]: something bad happened: Could not find a matching code signing identity for type 'AdHoc'.
快车道版本 2.141.0
追踪步骤:
- 我运行这个命令
security find-identity -v -p codesigning
结果如下:2 valid identities found
- 我检查了 Apple Worldwide Developer 证书及其有效和可信
- 我检查了 Keychain 和 Apple Developer 帐户中的分发证书,它们都在那里
这里是 Jenkins 执行 Shell:
#!/bin/zsh
export TERM=xterm-256color
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export GIT_TRACE_PACKET=1
export GIT_CURL_VERBOSE=1
source /Users/Shared/Jenkins/.rvm/scripts/rvm
rvm use 2.6.3
fastlane provide_crashlytics_build testing:false check_xcode:false --env xxx
这里是 faslane 车道:
########## Upload testbuild to crashlytics ##########
desc "Upload testbuild to crashlytics"
lane :provide_crashlytics_build do |options|
if options[:check_xcode]
verify_xcode
end
if options[:add_badge]
if ENV['DARK_BADGE']
badge(dark: true)
else
badge
end
end
build_preparations
if options[:testing]
start_tests
end
pem
match(
type: "adhoc",
app_identifier: [ENV['APP_IDENTIFIER'], ENV['APP_NOTIFICATION_EXTENSION_IDENTIFIER']],
force_for_new_devices: true
)
gym(
xcargs: "ARCHIVE=NO",
output_name: "#{ENV['OUTPUT_NAME_TESTING']}"
)
verify_build(
provisioning_type: 'distribution',
bundle_identifier: ENV['APP_IDENTIFIER']
)
version = get_ipa_info_plist_value(ipa: "#{ENV['OUTPUT_NAME_TESTING']}.ipa", key: "CFBundleShortVersionString")
crashlytics(
api_token: ENV['CRASHLYTICS_API_TOKEN'],
build_secret: ENV['CRASHLYTICS_BUILD_SECRET'],
emails: ENV['CRASHLYTICS_EMAILS'],
notifications: false,
notes: "#{change_log_last_five_commits}"
)
if ENV['SLACK_URL']
sh ("say 'Yippee! What a awsome day. Thanks to #{lastCommitAuthor} something great happend. A new build is born.'")
slack(
message: "New crashlytics build of #{ENV['SCHEME']} v.#{version}(#{build})",
channel: "#{ENV['SLACK_CHANNEL']}",
success: true,
use_webhook_configured_username_and_icon: true,
default_payloads: [],
payload: {
'Release Notes' => change_log_last_five_commits
}
)
end
clean_build_artifacts
end
这是快速通道日志:
Summary for match 2.141.0 |
+----------------------------+---------------------------------------------------------------------------------------+
| type | adhoc |
| app_identifier | ["xxxxxxxxxxxxxxxxxxxxxxxx", "xxxxxxxxxxxxxxxxxxxxxxxx.NotificationServiceExtension"] |
| force_for_new_devices | true |
| readonly | false |
| generate_apple_certs | false |
| skip_provisioning_profiles | false |
| username | xxxxxxxxxxxxxxx |
| team_id | R2Q6VXW97P |
| team_name | xxxxxxxxxxxxxxxxxxxxxxxxx |
| storage_mode | git |
| git_url | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| git_branch | master |
| shallow_clone | false |
| clone_branch_directly | false |
| keychain_name | login.keychain |
| force | false |
| skip_confirmation | false |
| skip_docs | false |
| platform | ios |
| verbose | false |
+----------------------------+---------------------------------------------------------------------------------------+
+-------------------+-------------------------------------------------------------+
| Installed Certificate |
+-------------------+-------------------------------------------------------------+
| User ID | R2Q6VXW97P |
| Common Name | iPhone Distribution: xxxxxxxxxxxxxxxxxxxxxxxxx (R2Q6VXW97P) |
| Organisation Unit | R2Q6VXW97P |
| Organisation | xxxxxxxxxxxxxxxxxxxxxxxxx |
| Country | US |
| Start Datetime | 2020-02-04 11:56:01 UTC |
| End Datetime | 2021-02-03 11:56:01 UTC |
+-------------------+-------------------------------------------------------------+
+-------------------------------------+--------------------------------------+
| Summary for sigh 2.141.0 |
+-------------------------------------+--------------------------------------+
| app_identifier | xxxxxxxxxxxxxxxxxxxxxxxxx |
| username | xxxxxxxxxxxxxxxxxxxxxxxxx |
| force | false |
| cert_id | 7D72F7MC75 |
| provisioning_name | match AdHoc xxxxxxxxxxxxxxxxxxxxxxxx |
| ignore_profiles_with_different_name | true |
| team_id | R2Q6VXW97P |
| team_name | xxxxxxxxxxxxxxxxxxxxxxxxx |
| platform | ios |
| adhoc | true |
| developer_id | false |
| development | false |
| skip_install | false |
| skip_fetch_profiles | false |
| skip_certificate_verification | false |
| readonly | false |
+-------------------------------------+--------------------------------------+
解决方案
- 正如@Scriptable 在他的评论中所说:
Because the Jenkins service runs like a daemon, it cannot access the login keychain, it uses the system keychain. Please make sure that your signing certificates are in the system keychain and see if this helps your issue.
- 证书从未设置为始终信任,它必须是使用系统默认值