我正在组装一个 Linux 机器,作为持续集成构建服务器;我们将主要构建 Java 的东西,但我认为这个问题适用于任何编译语言。
我应该使用什么文件系统和配置设置?(例如,我知道我不需要时间!)构建服务器将花费大量时间读取和写入小文件,并扫描目录以查看哪些文件已被修改。
更新:在这种情况下,数据完整性的优先级较低;它只是一台构建机器......最终的工件将被压缩并存档在其他地方。如果构建机器上的文件系统损坏并丢失所有数据,我们可以擦除并重新映像;构建将像以前一样继续运行。
我有一个使用 Gitlab CI 的 Gitlab 环境,用于一个新项目来证明编译的文件并通过 rsync 复制到生产服务器。
这些资源的构建是 exec 的机器是 docker(节点 6)的映像,但现在我必须使用 linux 将结果文件从该容器 Docker 命令复制到服务器......我的问题是通过 ssh 连接同步。
目前我有以下几点:
stages:
- deploy
before_script:
- npm i
- npm run build
job_deploy:
stage: deploy
script:
- ssh-keygen -t rsa -b 4096 -C '' -f ~/.ssh/deploy_rsa
- ssh-keyscan -H 8.8.8.8 >> ~/.ssh/known_hosts
- ssh-copy-id -i ~/.ssh/deploy_rsa.pub $SERVER_USER@8.8.8.8
- rsync -avuz $CI_PROJECT_DIR/dist/ $SERVER_USER@8.8.8.8:/var/wwww/example.com
only:
- master
Run Code Online (Sandbox Code Playgroud)
通过这个我得到:
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that …Run Code Online (Sandbox Code Playgroud) 我们想为我们的项目设置持续集成 (CI) 服务。CI 服务应该控制项目生命周期的所有方面,包括部署。
也就是说,我们希望在每次迭代时都有一个 CI 代理采用一个干净的系统(特别是 Ubuntu Server),在那里部署我们的项目并运行测试。
我们可能会从头开始自己编写 CI 服务,因为我们的生态系统相当不寻常。问题是:如何为每次 CI 迭代有效地提供全新的系统?
项目部署安装一些 Debian 包,配置几个 nginx 站点,并在系统范围内在特定于实现语言的包管理器 (LuaRocks) 中安装一些包。没有什么比这更具侵入性的了(我相信)。因此,与确保绝对隔离和清洁相比,能够快速设置干净的状态(在现代硬件上在一分钟内,更快——更好)更重要。
我看到了两种方法来做我们需要的事情:
但在这一点上,我没有足够的信息来决定。
你有什么建议?还有其他选择吗?有具体的工具名称吗?
注意:CI 服务将在 Citrix XenServer 来宾中运行。如果价格合理,付费解决方案是可以的。(通常他们在这个领域是不合理的。)远程 CI 解决方案不行。
我希望 Jenkins (1.561) 构建提交到 GitLab (6.7.5) 的合并(拉取)请求,由合并请求 Web 钩子触发。我有一个参数化构建,以及 Jenkins 插件“GitLab Merge Request Builder”(1.2.0)和“GitLab Hook”(1.0.0)。不幸的是,迁移到 Jenkins CI 并不是一个真正的选择。
只要变量、 和可用,合并请求构建器插件就能够构建合并请求。当插件轮询存储库本身时,这很有效,或者我使用手动有效负载(例如)触发构建,但我无法使用钩子执行此操作。gitlabMergeRequestIdgitlabTargetBranchgitlabSourceBranchcurl --data "gitlabMergeRequestId=3&so_on http://server_name/job/$JOB_NAME/buildWithParameters
使用 GitLab Hook 插件,我能够在 JSON 有效负载中获取必要的数据,但这些值具有“错误”的键:
gitlabMergeRequestId 是 idgitlabTargetBranch 是 target_branchgitlabSourceBranch 是 source_branch我已经尝试使用 GitLab Merge Request Builder 插件的要求和变量值来配置构建参数。不幸的是(并且可能是故意的),字段中的变量没有被替换,因此 Jenkins 正在寻找具有 id和类似分支值的合并请求。NameDefault ValueDefault Value${id}
我发现无法配置从 GitLab 发送的有效负载,并且 GitLab Hook 插件和 GitLab Merge Request Builder 插件使用的参数名称都没有配置选项。
我正在考虑编写一个小的 PHP 脚本来拦截和更改来自 POST 的有效负载,然后再将其传递给 Jenkins。虽然我确信这会奏效,但它确实看起来不必要地复杂。 …
一段时间以来,我一直在使用 Tomcat 8 的并行部署作为零停机持续部署设置的一部分。
运行测试手套后,CI 服务器自动将 .war 文件重命名为 application##{version-number}.war 并将 war 复制到 /webapp 文件夹。application##333 将与 application##332 很好地共存。
我遇到的唯一问题是,一旦所有流量(新会话)自动转换到新应用程序,我就必须手动取消部署旧应用程序。
Tomcat 是否有一些内置机制可以说“嘿,当这个服务减少到零会话时,它应该被删除”?也许我可以利用某种“最后一次会议刚刚过期”的事件。
如果其他人已经自动取消部署这种应用程序,我很想听听。谢谢!
是否可以在不使用任何 docker 镜像的情况下实现 gitlab ci 工作流?我看到的所有 gitlab runner 示例都仅基于 docker。即使用于生产部署。
如何在我现有的 linux 机器上实现 gitlab-ci 和部署过程?在生产服务器上我想部署代码运行 npm install 如果 package.json 被修改并重新启动节点实例
我想使用多个跑步者,并且每个跑步者都有 docker 图像会消耗资源。
我正在尝试在我的 Web 服务器上安装Jenkins,这是一个在 Amazon EC2 实例上运行的 Ubuntu 13.10 服务器。我已经重新启动詹金斯使用
sudo /etc/init.d/jenkins restart
Run Code Online (Sandbox Code Playgroud)
当我检查我的进程时
ps aux | grep jenkins
Run Code Online (Sandbox Code Playgroud)
我可以看到多个项目正在运行,并具有以下描述:
jenkins 22356 0.0 0.0 20268 400 ? S 10:10 0:00 /usr/bin/daemon --name=jenkins --inherit --env=JENKINS_HOME=/var/lib/jenkins --output=/var/log/jenkins/jenkins.log --pidfile=/var/run/jenkins/jenkins.pid -- /usr/bin/java -jar /usr/share/jenkins/jenkins.war --webroot=/var/run/jenkins/war --httpPort=8080 --ajp13Port=-1 --httpListenAddress=127.0.0.1 --ajp13ListenAddress=127.0.0.1 --preferredClassLoader=java.net.URLClassLoader
jenkins 22358 5.9 5.7 1618372 97376 ? Sl 10:10 0:17 /usr/bin/java -jar /usr/share/jenkins/jenkins.war --webroot=/var/run/jenkins/war --httpPort=8080 --ajp13Port=-1 --httpListenAddress=127.0.0.1 --ajp13ListenAddress=127.0.0.1 --preferredClassLoader=java.net.URLClassLoader
Run Code Online (Sandbox Code Playgroud)
服务器不想让我访问这个安装,所以如果我访问
x.x.x.x:8080
Run Code Online (Sandbox Code Playgroud)
我只是收到一个“糟糕!谷歌浏览器无法连接”页面,甚至没有 HTTP 状态 404 / 500。
我尝试检查/var/log/jenkins/jenkins.log,但它并不表示任何问题。重启后的日志输出如下:
Running …Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的代码部署到远程服务器。到目前为止我已经尝试过
这就是我得到的:
[JenkinsBuild] $ /bin/sh -xe /var/lib/jenkins/tmp/hudson4646064064846581974.sh
+ rsync -PSauve ssh --exclude=JenkinsBuild app bower.json config gruntfile.js karma.conf.js LICENSE.md Makefile node_modules package.json Procfile protractor.conf.js public README README.md server.js john@192.168.2.10:/srv/dp/prod
Host key verification failed.
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(600) [sender=3.0.6]
Run Code Online (Sandbox Code Playgroud)
任何想法我在这里做错了什么?
全部,
我们正在尝试在我们的 Jenkins 设置中进行自动化测试,以在我们的 salt 状态文件 ( .sls) 中运行“smoke”和“lint”类型的测试。到目前为止,所有 google-foo 都产生了很少的信息。有一种test=True在命令行中进行测试的方法,但这不适用于无外壳帐户(就像 Jenkin 的帐户通常那样)。
我还没有遇到过对 SaltStack 状态进行这种自动测试的人。所以:
1)有没有可能
2)任何人都知道我可以查看的好资源
TIA。
如何配置跳转主机来访问我无法直接访问的 Windows 服务器?
Ansible 文档解释了如何在 Linux 上执行此操作,但没有提及在 Windows 服务器上使用 WinRM 时如何实现类似的功能。
deployment ×4
gitlab ×3
jenkins ×3
linux ×2
ubuntu ×2
ansible ×1
build-server ×1
filesystems ×1
hook ×1
performance ×1
saltstack ×1
ssh ×1
tomcat ×1
windows ×1