Github 动作 macos 钥匙串访问
Github action macos keychain access
我正在尝试将我们的 iOS CI 转移到 github 操作,但我 运行 遇到了一些构建问题。使用 match 时似乎会出现这些问题(fastlane 在 gym 运行时挂起)。
这是让我认为它与钥匙串相关的日志
WARN [2019-09-26 13:46:14.52]: Could not configure imported keychain item (certificate) to prevent UI permission popup when code signing
Check if you supplied the correct `keychain_password` for keychain: `/Users/runner/Library/Keychains/login.keychain-db`
security: SecKeychainItemSetAccessWithPassword: The user name or passphrase you entered is not correct.
文档说 sudo 是无密码的,所以我假设钥匙串也是如此。我似乎错了,但我在文档中找不到任何内容。任何帮助将不胜感激。
编辑
Lyndsey Ferguson 下面的评论主要是解决方案。他们是使用 create_keychain 然后匹配的方法我只能指定钥匙串和它的密码所以我能够避免 import_certificate
编辑 2
这是我在 fastlane 中为解决这个问题所做的事情
create_keychain(
name: "actiontest_keychain",
password: "meow",
default_keychain: true,
unlock: true,
timeout: 3600,
lock_when_sleeps: false
)
match(
type: "appstore",
readonly: is_ci,
keychain_name: "actiontest_keychain",
keychain_password: "meow"
)
您可以尝试创建一个新的钥匙串并将其设置为默认值。
- name: Set up keychain
run: |
security create-keychain -p <password> build.keychain
security default-keychain -s build.keychain
security unlock-keychain -p <password> build.keychain
security set-key-partition-list -S apple-tool:,apple: -s -k actions build.keychain
这是一个可以接受的答案,但我想了解证书和私钥是如何进入钥匙串的。
试试这个:
- name: Set up keychain
run: fastlane run create_keychain name:name_of_keychain password:chosen_password
这将创建钥匙串,然后当您想要使用它时,您可以再次提供 chosen_password
无论您有什么。可能是 GITHUB_X
环境变量?
我无法使用 Fastlane,因为我正在尝试使用钥匙串来处理 Java 14 的新 jpackage tool in GitHub Actions to build and code sign a Java application native bundle, so I was excited to see Yakuhzi’s answer. It almost worked for me, but there were a couple of errors I had to sort out, which were very difficult because there were no error messages: my workflow just hung on the jpackage command,而我假设构建 Mac 虚拟机无形地提示虚拟帧缓冲区中要解锁的钥匙串。
这是对我有用的变体。前三个步骤没问题(我是 passing my signing certificate and its decryption passphrase to the script as environment variables extracted from Github Action secrets,并使用相同的密码来创建构建钥匙串):
security create-keychain -p "$IDENTITY_PASSPHRASE" build.keychain
security default-keychain -s build.keychain
security unlock-keychain -p "$IDENTITY_PASSPHRASE" build.keychain
但是此时尝试 运行 他的第四行会失败并出现此错误:
security: SecItemCopyMatching: The specified item could not be found in the keychain.
最终,在研究了 security set-key-partition-list
的文档后,我意识到第一个问题是 -k
参数需要钥匙串密码,在他的情况下一定是 actions
!所以我的下一步是将第 4 行修复为如下所示:
security set-key-partition-list -S apple-tool:,apple: -s -k "$IDENTITY_PASSPHRASE" build.keychain
虽然我仍然遇到错误,所以我进一步研究了文档,并在登录钥匙串中没有我的签名身份的备用 Mac mini 上试验了该命令。最终我发现该命令试图对钥匙串中尚不存在的签名密钥执行操作。所以我在该行之前移动了导入我的签名密钥的步骤,它开始工作了。这是它运行后的完整部分,您可以看到整个 script on GitHub:
security create-keychain -p "$IDENTITY_PASSPHRASE" build.keychain
security default-keychain -s build.keychain
security unlock-keychain -p "$IDENTITY_PASSPHRASE" build.keychain
echo "$IDENTITY_P12_B64" > DS_ID_App.p12.txt
openssl base64 -d -in DS_ID_App.p12.txt -out DS_ID_App.p12
security import DS_ID_App.p12 -A -P "$IDENTITY_PASSPHRASE"
security set-key-partition-list -S apple-tool:,apple: -s -k "$IDENTITY_PASSPHRASE" build.keychain
也许有点晚了,但我认为值得一提的是有一个方便的 fastlane 动作 setup_ci 为此目的:
描述
Setup the keychain and match to work with CI
- Creates a new temporary keychain for use with match
- Switches match to readonly mode to not create new profiles/cert on CI
- Sets up log and test result paths to be easily collectible
如果您使用 CI,只需将其添加到您的 Fastfile 的顶部或特定通道内。
Fastfile 通道示例
lane :build_release do
setup_ci
sync_code_signing(
type: "appstore",
readonly: is_ci
)
build_app
end
还要确保您的 配置文件 和 证书 在您的 match
存储中是最新的并且您配置了 手动签名 发布版本。否则 match
可能会尝试使用错误的签名身份对您的应用进行签名,这将失败 ;)
我正在尝试将我们的 iOS CI 转移到 github 操作,但我 运行 遇到了一些构建问题。使用 match 时似乎会出现这些问题(fastlane 在 gym 运行时挂起)。
这是让我认为它与钥匙串相关的日志
WARN [2019-09-26 13:46:14.52]: Could not configure imported keychain item (certificate) to prevent UI permission popup when code signing
Check if you supplied the correct `keychain_password` for keychain: `/Users/runner/Library/Keychains/login.keychain-db`
security: SecKeychainItemSetAccessWithPassword: The user name or passphrase you entered is not correct.
文档说 sudo 是无密码的,所以我假设钥匙串也是如此。我似乎错了,但我在文档中找不到任何内容。任何帮助将不胜感激。
编辑
Lyndsey Ferguson 下面的评论主要是解决方案。他们是使用 create_keychain 然后匹配的方法我只能指定钥匙串和它的密码所以我能够避免 import_certificate
编辑 2
这是我在 fastlane 中为解决这个问题所做的事情
create_keychain(
name: "actiontest_keychain",
password: "meow",
default_keychain: true,
unlock: true,
timeout: 3600,
lock_when_sleeps: false
)
match(
type: "appstore",
readonly: is_ci,
keychain_name: "actiontest_keychain",
keychain_password: "meow"
)
您可以尝试创建一个新的钥匙串并将其设置为默认值。
- name: Set up keychain
run: |
security create-keychain -p <password> build.keychain
security default-keychain -s build.keychain
security unlock-keychain -p <password> build.keychain
security set-key-partition-list -S apple-tool:,apple: -s -k actions build.keychain
这是一个可以接受的答案,但我想了解证书和私钥是如何进入钥匙串的。
试试这个:
- name: Set up keychain
run: fastlane run create_keychain name:name_of_keychain password:chosen_password
这将创建钥匙串,然后当您想要使用它时,您可以再次提供 chosen_password
无论您有什么。可能是 GITHUB_X
环境变量?
我无法使用 Fastlane,因为我正在尝试使用钥匙串来处理 Java 14 的新 jpackage tool in GitHub Actions to build and code sign a Java application native bundle, so I was excited to see Yakuhzi’s answer. It almost worked for me, but there were a couple of errors I had to sort out, which were very difficult because there were no error messages: my workflow just hung on the jpackage command,而我假设构建 Mac 虚拟机无形地提示虚拟帧缓冲区中要解锁的钥匙串。
这是对我有用的变体。前三个步骤没问题(我是 passing my signing certificate and its decryption passphrase to the script as environment variables extracted from Github Action secrets,并使用相同的密码来创建构建钥匙串):
security create-keychain -p "$IDENTITY_PASSPHRASE" build.keychain
security default-keychain -s build.keychain
security unlock-keychain -p "$IDENTITY_PASSPHRASE" build.keychain
但是此时尝试 运行 他的第四行会失败并出现此错误:
security: SecItemCopyMatching: The specified item could not be found in the keychain.
最终,在研究了 security set-key-partition-list
的文档后,我意识到第一个问题是 -k
参数需要钥匙串密码,在他的情况下一定是 actions
!所以我的下一步是将第 4 行修复为如下所示:
security set-key-partition-list -S apple-tool:,apple: -s -k "$IDENTITY_PASSPHRASE" build.keychain
虽然我仍然遇到错误,所以我进一步研究了文档,并在登录钥匙串中没有我的签名身份的备用 Mac mini 上试验了该命令。最终我发现该命令试图对钥匙串中尚不存在的签名密钥执行操作。所以我在该行之前移动了导入我的签名密钥的步骤,它开始工作了。这是它运行后的完整部分,您可以看到整个 script on GitHub:
security create-keychain -p "$IDENTITY_PASSPHRASE" build.keychain
security default-keychain -s build.keychain
security unlock-keychain -p "$IDENTITY_PASSPHRASE" build.keychain
echo "$IDENTITY_P12_B64" > DS_ID_App.p12.txt
openssl base64 -d -in DS_ID_App.p12.txt -out DS_ID_App.p12
security import DS_ID_App.p12 -A -P "$IDENTITY_PASSPHRASE"
security set-key-partition-list -S apple-tool:,apple: -s -k "$IDENTITY_PASSPHRASE" build.keychain
也许有点晚了,但我认为值得一提的是有一个方便的 fastlane 动作 setup_ci 为此目的:
描述
Setup the keychain and match to work with CI
- Creates a new temporary keychain for use with match
- Switches match to readonly mode to not create new profiles/cert on CI
- Sets up log and test result paths to be easily collectible
如果您使用 CI,只需将其添加到您的 Fastfile 的顶部或特定通道内。
Fastfile 通道示例
lane :build_release do
setup_ci
sync_code_signing(
type: "appstore",
readonly: is_ci
)
build_app
end
还要确保您的 配置文件 和 证书 在您的 match
存储中是最新的并且您配置了 手动签名 发布版本。否则 match
可能会尝试使用错误的签名身份对您的应用进行签名,这将失败 ;)