标签: continuous-integration

将网站构建和部署为 .deb 包的最佳方式

一段时间以来,我一直在努力将(主要是 PHP)网站部署为 .deb 文件,并想知道是否有比我相当复杂的方法更好的方法。我的目标是在我的临时服务器上进行持续集成,并从 Jenkins 内一键部署到实时服务器。

我现在的用例:

  • 在 OSX 上开发代码
  • Git 中的版本控制
  • 源包含带有控制、postinst 和 prerm 脚本的 debian/ 文件夹
  • Phing 构建脚本在 fakeroot 环境中本地运行
    • 将文件复制到镜像文件系统布局的 /tmp 构建文件夹中
    • 根据需要将文件所有权设置为 root / www-data
    • 运行 dpkg-deb --build ${build.dir} ${working.dir}
    • 将包复制到我 LAN 上的私有 deb 存储库

我试图设置一个 Jenkins CI 服务器来观察 Git 存储库的提交并自动执行构建。问题是 Jenkins 以自己的用户身份运行,该用户无权设置上述文件权限。我也看不到在 Jenkins 内部的 fakeroot 环境中运行 Phing 构建的明显方法。

我的问题是:

  • 有没有更好的方法来设置正确的文件所有权和权限,而不必将所有内容复制到临时目录并使用 Phing 步骤来修改所有内容?
    • dpkg-deb 命令真的需要事先在文件系统上设置所有文件权限吗?在安装 .deb 时,我可以在 debian/ 文件夹中放入一些可以设置这些权限的东西吗?
  • 如何让 Jenkins 运行具有设置文件所有权的正确权限的构建脚本?

我可能误解了 .debs 是如何工作的,但是本地文件系统源代码上的文件所有权必须镜像目标似乎相当不方便!

我对人们用来执行类似任务的任何其他构建和 CI 系统的建议持开放态度。

debian continuous-integration jenkins

5
推荐指数
1
解决办法
3960
查看次数

MSBuild 在构建寻找旧版本的 Microsoft.Data.Tools.Schema.Sql 时失败

在为 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)

team-foundation-server azure continuous-integration

5
推荐指数
1
解决办法
2137
查看次数

CI/CD 环境中的凭证管理

设置:我有一个应用程序,我目前在服务器上手动部署。它需要多个凭据(外部服务的客户端机密、令牌以及 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 系统。

credentials continuous-integration

5
推荐指数
1
解决办法
1212
查看次数

是否可以通过 CloudFormation 模板填充 S3 存储桶?

我需要将我的 CF 模板(GraphQL 架构、Lambda 源等)的一些文件存储到 S3 存储桶中,该存储桶也(希望)在同一模板中定义,因为这似乎是直接删除内容之外的唯一方法进入模板来做。我也在尝试提前考虑 CI/CD,如果检查这些文件并且 CI/CD 工具适当地移动它们会很好。

有没有办法将文件从模板复制到 S3?大多数人如何使用 CI/CD 做到这一点?

deployment amazon-web-services continuous-integration amazon-cloudformation aws-cli

5
推荐指数
1
解决办法
2406
查看次数

GitHub SSH 操作失败:ssh:握手失败:ssh:无法进行身份验证,已尝试方法 [无公钥],没有保留支持的方法

我最近租了一台运行 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>,但是我得到了同样的错误。

ssh centos continuous-integration github-actions

5
推荐指数
0
解决办法
4541
查看次数

使用 root 权限在 Hudson 中执行构建任务

我有一个执行 apt-get 的构建脚本,因此需要 root 权限。在 Hudson 中运行此脚本的最佳方法是什么?

目前,我发现唯一有效的解决方案是为用户 hudson 向 sudoers 文件添加一个条目,如下所示:

hudson  ALL=(ALL) NOPASSWD:ALL
Run Code Online (Sandbox Code Playgroud)

然而,虽然我的构建脚本现在在 Hudson 中运行没有错误,但我对这个解决方案并不完全满意。有没有更好的办法?

security sudo hudson continuous-integration

4
推荐指数
1
解决办法
1765
查看次数

在 TeamCity 中构建时捆绑安装

我正在尝试在 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)

ruby-on-rails teamcity continuous-integration

4
推荐指数
1
解决办法
2838
查看次数

试图设置 phpUnderControl 但缺少 phpcb

我正在尝试按照本教程http://techportal.ibuildings.com/2009/03/03/getting-started-with-phpundercontrol/在 Ubuntu 10.04 上设置 phpUnderControl 。我到了它说要输入的部分,sudo phpuc example /opt/cruisecontrol但收到以下错误:缺少 cli 工具“phpcb”,请检查 PATH 变量。我做了一点谷歌搜索,但似乎无法在任何地方找到 phpcb 的参考。有谁知道这是什么以及我在哪里可以得到它?谢谢。

php continuous-integration cruisecontrol

3
推荐指数
1
解决办法
2643
查看次数

使用主/从 Jenkins 服务器 vs 维护 3 个独立的服务器?

背景:

我是一名 SW 开发人员,在配置持续集成解决方案方面有一些经验,但我不太熟悉某些持续集成策略的优缺点,并且想就两种服务器管理策略的优点和挑战提供建议。

题:

我们有 3 个独立的、复杂的 Android 应用程序,我正在为其创建持续集成服务器。我已经成功创建了一个运行 Windows Server 2008 的原型虚拟机,它成功地编译了代码、启动了一个模拟器并运行了 android 单元测试。另外,我还能够运行我们希望在此代码上运行的静态分析,以向开发人员提供反馈。

在之前使用 CruiseControl.NET 而不是 jenkins 的配置中,我们成功地维护了 3 个独立的虚拟机,所有虚拟机都具有独立的虚拟化硬件。这种设置的好处是划分——一个项目可以改变他们的构建服务器,而另一个项目不受影响。

但是,转移到 Jenkins,我注意到它支持主/从节点,这可以让我配置一个 Jenkins 主实例与多个项目,然后配置多个从节点,据我了解,这些从节点将执行任何 Jenkins 任务- 编译、单元测试、静态分析并将此信息传递回主服务器。这种设置的好处似乎是:

  • 可扩展性 - 我可以轻松添加第 4 个或第 5 个项目并保持相同数量的从站
  • 只需要设置 1 个主站和 3 个从站,这可能比 3 个独立的主站更容易设置。

这种情况的挑战似乎是:

  • 我必须学习如何创造奴隶
  • 我将不得不处理客户端和奴隶之间的通信
  • 我可能在运行需要 UI 交互的单元测试时遇到问题 - 描述如何运行无头从站的帖子

是否有任何其他直接的好处或挑战我忘记了,或者有设置 jenkins 经验的人对哪种方法更合适有意见?

continuous-integration jenkins

3
推荐指数
1
解决办法
2559
查看次数