我有一个运行git远程命令并需要用户/密码凭据的脚本,因为脚本由teamcity运行我想知道teamcity是否有办法将这些凭据传递给我的脚本?
答案 0 :(得分:0)
根据设计,TeamCity拒绝提供用户名/密码来构建步骤。这并不是说你无法以这种方式工作,而是要知道它的原因。如果任何人 能能够配置构建作业但不应该能够看到相关密码,那么您就会遇到安全问题。
我认为最好的解决方案是尽可能使用SSH。 TeamCity将很乐意在您的构建步骤执行时运行ssh-agent,并使用您选择的私钥(因此,身份)进行配置。只是能够配置构建不会让用户能够在这种情况下查看私钥(或任何其他敏感凭证),即使他们巧妙而恶意地编码。
当然,这并不是总是一个选项。但对于基本的git访问它通常是,你可能想要考虑它。
答案 1 :(得分:0)
TeamCity密码参数类型
将用户名和密码设置为TC构建参数。在Spec部分选择Edit,将Type设置为Password
。一旦设置了参数值,这将在构建日志和所有TC对话框中模糊密码。
请注意,没有什么可以阻止狡猾的用户向echo %my.fancy.secret.password%
添加构建步骤。因此,您的TC权限需要符合此处。
<强> SSH 强>
正如Mark在他的回答中所说,ssh使用几乎任何构建工具来管理它变得更容易。我们在构建代理上使用ssh_config,这对您的问题非常重要。
答案 2 :(得分:0)
在我的情况下,我试图运行TeamCity Gradle的“发布”工作。
一路上我有几个错误,其中一个是这篇文章的原始问题。
[Step 5/5] Execution failed for task ':my-service:checkUpdateNeeded'. org.gradle.api.GradleException: Failed to run [git remote update] - [Fetching origin
][Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
error: Could not fetch origin
]
解决方案1:
发生的事情是TeamCity知道如何使用SSH密钥进行VCS访问。但是一旦构建步骤开始运行,他们将不知道SSH密钥,因此git身份验证失败。
[Step 5/5] Execution failed for task ':my-service:my-service:myServiceCore:publishMavenJavaPublicationToMavenRepository'. org.gradle.api.artifacts.PublishException: Failed to publish publication 'mavenJava' to repository 'maven'
[17:31:17][Step 5/5] Release process failed, reverting back any changes made by Release Plugin.
解决方案2:
我需要向构建作业添加凭据,以对Nexus release
存储库(而非snapshot
存储库)进行写访问。
mavenUser
和mavenPassword
作为环境变量添加到TeamCIty作业。mavenPassword
被添加为password format/spec
,所以没有人看到该值。-DmavenUser=%env.mavenUser% -DmavenPassword=%env.mavenPassword%
System.getProperty("mavenUser")
来访问这些值println "Release Job - mavenUser=" + System.getProperty("mavenUser")
,因此我可以查看它是否已成问题。
gradle.properties
中)。它将在master
分支上将其提交/推送回您的git repo。
错误:只能通过请求请求修改分支refs / heads / master
[Step 5/5] Execution failed for task ':my-service:preTagCommit'. org.gradle.api.GradleException: Failed to push to remote - [To ssh://git@stash.somedomain.com/ins/my-service.git
! refs/heads/master:refs/heads/master [remote rejected] (pre-receive hook declined)
][remote: *%%%%%.
remote: %%% %%%
remote: ,%# %%
remote: %% %%
remote: %# %%
remote: %% %
remote: %( %%
remote: %%%%%%%%%%%%%%%%%%%%%%%%%%%
remote: %#%*%#///////%# %%///////%%%%%%
remote: ,% %*%%******%# %%******%(%%,%
remote: %%/ %%/**%%/%%%%%%%(**#%( %%#
remote: %% %%% %(
remote: % .%
remote: *% %%%%% .%
remote: %# %%
remote: .%% .%%
remote: .%%.%%, %%%.%%/
remote: %%%%%%##%. #%%%%%. .%((%%%%%%
remote: %%#(((((((((%%, #%%(((((((((#%%.
remote: %%%((((((((((((((((((%%%, .%%%((((((((((((((((((#%%*
remote: %%(((((((((((((((((((((((((%(((((((((((((((((((((((((#%.
remote: ,%(((((((((((((((((((((((((((((((((((((((((((((((((((((((%#
remote: %#((((((((((((((((((((((((((((((((((((((((((((((((((((((((%
remote: %%%%%%%%%%%%%(((((((((((((((((((((((((((((((((%%%%%%%%%%%%%
remote: %% %####((((((###%%%%%%%%#(((((((((% ,%
remote: ,% %%%%%%#. %%%((((((%* %%
remote: #% %%%# %%
remote: .% .%%%%%%%%% %#
remote: % #%%% %
remote: % %%%% %*
remote: /%************/#%%%%%%######%%* ..,*/(%%
remote: %%######(((((((##################%%
remote: %%######(((((((((((((((((((((((((%%
remote: //////////////%%%%%%%%#########################%%///////// ///
remote: ----------------------------------------------------
remote: Branch refs/heads/master can only be modified through pull requests.
remote: Check your branch permissions configuration with the project administrator.
remote: ----------------------------------------------------
remote:
remote:
error: failed to push some refs to 'ssh://git@stash.somedomain.com/ins/my-service.git'
]
解决方案3: 确保您的git用户(基于您的SSH密钥)有权更新git仓库。
再次运行“发布”作业,然后在git repo中查看最新的提交。
解决方案4: 临时添加此文件以配置“发布”任务(在build.gradle中)。
release {
String skipTests = System.getProperty('skipTests', 'false')
println "Release Job - skipTests=" + skipTests
if (skipTests == 'true') {
buildTasks = ['jar']
}
//Make sure the user/password is making it into Gradle
println "Release Job - mavenUser=" + System.getProperty("mavenUser")
println "Release Job - mavenPassword=" + System.getProperty("mavenPassword")
}