一段时间以来,我一直在努力将(主要是 PHP)网站部署为 .deb 文件,并想知道是否有比我相当复杂的方法更好的方法。我的目标是在我的临时服务器上进行持续集成,并从 Jenkins 内一键部署到实时服务器。
我现在的用例:
我试图设置一个 Jenkins CI 服务器来观察 Git 存储库的提交并自动执行构建。问题是 Jenkins 以自己的用户身份运行,该用户无权设置上述文件权限。我也看不到在 Jenkins 内部的 fakeroot 环境中运行 Phing 构建的明显方法。
我的问题是:
我可能误解了 .debs 是如何工作的,但是本地文件系统源代码上的文件所有权必须镜像目标似乎相当不方便!
我对人们用来执行类似任务的任何其他构建和 CI 系统的建议持开放态度。
在为 2012 安装和配置构建服务器后,我尝试进行 azure 持续部署。
我安装了 TFS2012。服务器上的构建控制器和单个代理。连接到云 TFS2012。在这种情况下,我也使用 Azure 网站。我在构建服务器上安装了 Visual Studio 2012 Professional 和 SQL Server 2012。该项目没有数据库,所以我不确定它为什么要寻找 10.3。我没有看到那个版本的服务器,但是我看到了 11.0.2861.0。是否有一些配置需要更改才能查看较新版本?我还在构建服务器上安装了 SSDT June 2012。编译成功,它实际上移动了所有文件并创建了一个包。但是我收到此错误使构建事件失败。我错过了什么?
我收到以下错误消息:
Exception Message: The type initializer for 'Microsoft.Web.Deployment.DeploymentManager' threw an exception. (type TypeInitializationException)
Exception Stack Trace:
Server stack trace:
at Microsoft.Web.Deployment.DeploymentProviderSettingCollection..ctor(String factoryName)
at Microsoft.Web.Deployment.DeploymentProviderOptions..ctor(String factoryName)
at Microsoft.Web.Deployment.DeploymentProviderOptions..ctor(DeploymentWellKnownProvider wellKnownProvider)
at Microsoft.TeamFoundation.Deployment.Workflow.Activities.MSDeployWorker.RunCommand(String publishEndpoint, String targetSite, String userName, String password, String packagePath, String setParametersPath, Boolean allowUntrustedCertificates)
at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs)
at System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(IMessage msg, IMessageSink replySink) …Run Code Online (Sandbox Code Playgroud) 设置:我有一个应用程序,我目前在服务器上手动部署。它需要多个凭据(外部服务的客户端机密、令牌以及 AES 密钥和 IV 等),我目前已将这些凭据存储在使用gpg. 每当我重新启动应用程序时,我都会gpg在控制台中解锁-key,然后服务将从应用程序脚本中再次解密文件(因为gpg-agent密码在内存中保留有限的时间)并通过管道解析它们。
这种方法的优点是,gpg访问它们所需的凭据和-passphrase 都不会持久化到磁盘,只保存在内存中。因此,即使具有完全的 root 访问权限,也无法恢复凭据。唯一的机会是在gpg-key 保持解锁状态的短时间内获得访问权限。
缺点是 (a) 其他用户无法启动该服务(除非我们共享我的帐户)和 (b) 应用程序无法通过任何自动方式启动。
github 上的creds项目与我正在做的类似,但仍然存在上述缺点。可以使用多个gpg密钥对文件进行加密,然后尝试使用所有密钥对其进行解密,直到成功为止。
问题:有什么更好的方法来处理 (a) 多个用户无需共享密钥或帐户即可访问的凭据,(b) 可通过 CI/CD 系统访问(每次部署发生时我都没有控制台), (c) 只在内存中保存密码数据?使用多个gpg键的“解决方法”看起来像一个复杂的黑客,并且不适用于 CI/CD 系统。
我需要将我的 CF 模板(GraphQL 架构、Lambda 源等)的一些文件存储到 S3 存储桶中,该存储桶也(希望)在同一模板中定义,因为这似乎是直接删除内容之外的唯一方法进入模板来做。我也在尝试提前考虑 CI/CD,如果检查这些文件并且 CI/CD 工具适当地移动它们会很好。
有没有办法将文件从模板复制到 S3?大多数人如何使用 CI/CD 做到这一点?
deployment amazon-web-services continuous-integration amazon-cloudformation aws-cli
我最近租了一台运行 CentOS 8 的 VPS。我想从我的一个存储库进行连续部署,这样当我推送到 main 时,存储库就会更新。我在全新的 CentOS 安装上按照本教程进行操作,执行以下操作(这是我的 .yml):
name: Deploy
on: [push]
jobs:
deploy:
if: github.ref == 'refs/heads/main'
runs-on: [ubuntu-latest]
steps:
- uses: actions/checkout@v1
- name: Copy repository contents via scp
uses: appleboy/scp-action@master
env:
HOST: ${{ secrets.HOST }}
USERNAME: ${{ secrets.USERNAME }}
PORT: ${{ secrets.PORT }}
KEY: ${{ secrets.SSH_KEY }}
with:
source: "."
target: "/var/www/deploy"
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
通过 scp 复制存储库内容
... 2020/12/02 18:05:57 错误将文件复制到目标:***,错误消息:ssh:握手失败:ssh:无法身份验证,尝试的方法[无公钥],没有支持的方法仍然无人机- scp 错误:将文件复制到目标时出错:***,错误消息:ssh:握手失败:ssh:无法进行身份验证,已尝试方法 [无公钥],没有保留支持的方法
我已经尝试过ssh-add <private_key>,但是我得到了同样的错误。
我有一个执行 apt-get 的构建脚本,因此需要 root 权限。在 Hudson 中运行此脚本的最佳方法是什么?
目前,我发现唯一有效的解决方案是为用户 hudson 向 sudoers 文件添加一个条目,如下所示:
hudson ALL=(ALL) NOPASSWD:ALL
Run Code Online (Sandbox Code Playgroud)
然而,虽然我的构建脚本现在在 Hudson 中运行没有错误,但我对这个解决方案并不完全满意。有没有更好的办法?
我正在尝试在 TeamCity 中运行构建。我正在尝试为单元测试构建的应用程序是用 Ruby on Rails 编码的。
在克隆构建失败后,我将 VCS 根配置为从我的存储库获取。这里是:
Bundler::GemNotFound: Could not find gem 'devise (= 2.1.0) ruby' in the gems available on this machine.
Stacktrace:
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/resolver.rb:287:in `resolve'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/resolver.rb:346:in `block in resolve_requirement'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/resolver.rb:344:in `catch'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/resolver.rb:344:in `resolve_requirement'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/resolver.rb:295:in `block in resolve'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/resolver.rb:294:in `reverse_each'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/resolver.rb:294:in `resolve'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/resolver.rb:161:in `start'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/resolver.rb:128:in `block in resolve'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/resolver.rb:127:in `catch'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/resolver.rb:127:in `resolve'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/definition.rb:192:in `resolve'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/definition.rb:127:in `specs'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/definition.rb:172:in `specs_for'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/definition.rb:161:in `requested_specs'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/environment.rb:23:in `requested_specs'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/runtime.rb:11:in `setup'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler.rb:107:in `setup'
/usr/local/rvm/gems/ruby-1.9.2-p320@global/gems/bundler-1.1.4/lib/bundler/setup.rb:17:in `<top (required)>'
/usr/local/rvm/rubies/ruby-1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `require'
/usr/local/rvm/rubies/ruby-1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `rescue in require'
/usr/local/rvm/rubies/ruby-1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require' …Run Code Online (Sandbox Code Playgroud) 我正在尝试按照本教程http://techportal.ibuildings.com/2009/03/03/getting-started-with-phpundercontrol/在 Ubuntu 10.04 上设置 phpUnderControl 。我到了它说要输入的部分,sudo phpuc example /opt/cruisecontrol但收到以下错误:缺少 cli 工具“phpcb”,请检查 PATH 变量。我做了一点谷歌搜索,但似乎无法在任何地方找到 phpcb 的参考。有谁知道这是什么以及我在哪里可以得到它?谢谢。
背景:
我是一名 SW 开发人员,在配置持续集成解决方案方面有一些经验,但我不太熟悉某些持续集成策略的优缺点,并且想就两种服务器管理策略的优点和挑战提供建议。
题:
我们有 3 个独立的、复杂的 Android 应用程序,我正在为其创建持续集成服务器。我已经成功创建了一个运行 Windows Server 2008 的原型虚拟机,它成功地编译了代码、启动了一个模拟器并运行了 android 单元测试。另外,我还能够运行我们希望在此代码上运行的静态分析,以向开发人员提供反馈。
在之前使用 CruiseControl.NET 而不是 jenkins 的配置中,我们成功地维护了 3 个独立的虚拟机,所有虚拟机都具有独立的虚拟化硬件。这种设置的好处是划分——一个项目可以改变他们的构建服务器,而另一个项目不受影响。
但是,转移到 Jenkins,我注意到它支持主/从节点,这可以让我配置一个 Jenkins 主实例与多个项目,然后配置多个从节点,据我了解,这些从节点将执行任何 Jenkins 任务- 编译、单元测试、静态分析并将此信息传递回主服务器。这种设置的好处似乎是:
这种情况的挑战似乎是:
是否有任何其他直接的好处或挑战我忘记了,或者有设置 jenkins 经验的人对哪种方法更合适有意见?