标签: continuous-deployment

使用Git和Heroku进行适当的持续集成和持续部署

我正在使用heroku和git在rails网站上开发ruby.

我应该使用哪些工具和功能来设置以下简单的开发过程?

代码>登记>自动测试>自动部署

  • 我将我的代码检入我的存储库(首选选项,托管git,如github)
  • 测试自动运行并在我的staging heroku应用程序中部署网站
  • 如果测试通过,网站将自动部署在我的生产heroku应用程序上
  • 如果测试失败,我想以某种方式得到通知.

你会怎么做?

git continuous-integration ruby-on-rails heroku continuous-deployment

12
推荐指数
2
解决办法
3494
查看次数

使用psexec通过Jenkins运行远程批处理文件失败

使用psexecJenkins 运行远程批处理文件失败.使用psexec从奴隶运行相同的批处理文件直接工作没有魅力.

让我提供一些更多信息.Jenkins及其奴隶与我们的目标机器位于一个单独的域中.

当我像这样运行批处理文件时:

"D:\Temp\PsTools\PsExec.exe" \\<targetmachine> -u <targetdomain\targetdomainuser> -p <pwd> -accepteula  "d:\temp\remotescript.bat" arg1 arg2
Run Code Online (Sandbox Code Playgroud)

直接从奴隶(远程桌面接管机器并打开命令提示符)这完美.

当在Jenkins的Windows批量构建步骤中输入时,没有可见的输出,我只看到一个微调器,但没有任何事情发生,并且构建挂起排队任何其他构建创建大量积压.显然我得到了一个失败审计,我的Jenkins用户尝试登录到目标计算机,但是我在目标计算机上指定了具有管理员权限的域用户(目标计算机域的域用户).

有没有人知道为什么用户尝试使用除提供的任何其他凭据登录以及为什么这样可以直接从Jenkins-slave运行它?

或者任何其他实现此目的的方法(在远程计算机上运行批处理文件)都非常受欢迎.

continuous-integration automation batch-file psexec continuous-deployment

12
推荐指数
2
解决办法
2万
查看次数

自动部署到F5负载平衡环境

我们目前正在使用TeamCity进行CI构建,我们也正在尝试设置自动部署.

我目前正在尝试部署的项目是位于F5负载均衡器下的Windows服务.在未来,我们还希望自动部署我们的IIS网站,这些网站也位于F5之下.

从TeamCity我们可以执行PowerShell脚本来取消所需服务器上的Windows服务,将文件推送到它,然后重新安装服务.

但是,我无法弄清楚如何处理负载均衡器.我们希望一次禁用1个节点,监视要删除的所有连接,然后部署我们的代码并重新启动节点.

这似乎是一个非常普遍的问题,但我发现很少有关于如何做的信息.

谢谢!

回答

感谢Jonathon Rossi的iControl Powershell cmdlet!

对于其他用户的问题,这里有一个关闭,监视连接丢弃,推送代码,然后通过powershell脚本重新打开F5负载均衡器的示例

要使这些脚本正常工作,您首先必须从下面的答案中提供的链接安装F5 iControl cmdlet

#PULL IN OUR F5 UTILITY FUNCTIONS
. .\F5Functions.ps1


#DEFINE LOGIC TO DEPLOY CODE TO A NODE THAT HAS ALREADY BEEN REMOVED FROM THE LOAD BALANCER
function Deploy(
    [F5Node]$Node
)
{
    Write-Host "Deploying To: "$Node.Name
    #TODO: Remotely shut down services, push code, start back up services
}


#DEFINE NODES
$nodes = @()
$nodes += New-Object F5Node -ArgumentList @("TestNode1", "1.1.1.1")
$nodes += New-Object F5Node -ArgumentList @("TestNode2", "1.1.1.2") …
Run Code Online (Sandbox Code Playgroud)

.net powershell continuous-integration f5 continuous-deployment

12
推荐指数
1
解决办法
4088
查看次数

Jenkins任务为远程主机

在部署场景中,我需要在主机列表上创建和运行jenkins任务,即创建类似参数化任务(其中ip地址是参数)或具有HOST轴的Multijob插件上的任务,但在多个并行运行仅2个1主机.

其中一个选项可能是使用主机列表运行ansible,但我希望分别查看每个主机的状态,并在需要时重新启动jenkins作业.

主要选项是使用Job DSL PluginPipeline Plugin,但在这里我需要帮助来理解应该使用dsl groovy代码的类/方法来实现这一点.
任何人都可以帮忙吗?

continuous-deployment jenkins jenkins-job-dsl devops jenkins-pipeline

12
推荐指数
1
解决办法
762
查看次数

Docker Swarm部署 - 等待服务/容器存在

我有一个工作群设置和滚动更新部署.由于我必须在部署后执行某些任务(如数据库迁移),因此我向堆栈添加了"管理器"服务.这项服务仅限于节点管理器 - 所以我总能找到它.

要获取当前的containerID,请使用以下命令:
export MANAGER_ID=$(docker --tls ps --filter label=com.docker.swarm.service.name=projectname-php-manager -q)

这有效......但不是在部署期间.

stack deploy很快就会退出(因为容器已经启动),甚至是经理容器的出口都会更新.我还添加了一个sleep 10befor geting containerID,但结果各不相同.

有没有办法等待或知道何时部署特定服务?

完整部署看起来像这样(在gitlab-ci作业中完成 - 但这不是问题的根源):

deploy:staging:
  variables:
    DOCKER_HOST: "tcp://swarm-manager.hostname.tld:2376"
    DOCKER_CERT_PATH: "/home/gitlab-runner/docker/swarm-manager.hostname.tld"
    VERSION_TAG: "$CI_COMMIT_TAG"
    MYSQL_PROD_PASSWORD: "$MYSQL_PROD_PASSWORD"
    SECRET_TOKEN: "$SECRET_TOKEN"
  script:
    - docker --tls stack deploy -c docker-compose.prod.yml project-name --with-registry-auth --prune
    - sleep 10
    - export MANAGER_ID=$(docker --tls ps --filter label=com.docker.swarm.service.name=project-name_php-manager -q)
    - docker --tls exec -t $MANAGER_ID bin/console doctrine:migrations:migrate --no-interaction --allow-no-migration
  stage: deploy
  environment:
    name: staging
    url: http://projectname.com
  only: [tags]
  cache: ~
  dependencies: …
Run Code Online (Sandbox Code Playgroud)

continuous-deployment docker docker-swarm

12
推荐指数
1
解决办法
3264
查看次数

如何在monorepo内部版本的产品?

我一直在教育自己关于monorepos,因为我相信这对我的团队和我们项目的现状是一个很好的解决方案.我们有多个Web产品(客户端门户,内部门户,API,核心共享代码).

我正在努力寻找我想要找到的答案的版本.

当您的所有项目和产品都在monorepo内时,版本控制策略是什么?

  • 1版适合所有?
  • 具有独立版本控制的Git子模块(打破了单声道回购的重点)
  • 其他策略?

从CI的角度来看,当您在项目A中提交某些内容时,是否应该在所有项目中启动整套测试以确保没有任何损坏,即使没有必要对依赖/共享模块进行更改?

versioning continuous-integration continuous-deployment monorepo

12
推荐指数
1
解决办法
2190
查看次数

仅当上一步已运行时才运行 GitHub 操作步骤

我在 GitHub 操作中设置了一个工作流来运行我的测试并创建测试覆盖的工件。我的 YAML 文件的精简版如下所示:

name: Build

on: [pull_request]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      # Other steps here

      - name: Build app
      - name: Run tests
      - name: Create artifact of test coverage

      # Other steps here
Run Code Online (Sandbox Code Playgroud)

问题是当测试失败时不会创建工件。

if: always()docs 中找出了条件,但这也会导致当我的Build app步骤失败时运行此步骤。我不希望这种情况发生,因为在这种情况下没有什么可存档的。

如果上一步已运行(成功或失败),我如何仅运行此步骤?

continuous-integration github continuous-deployment github-actions

12
推荐指数
2
解决办法
5232
查看次数

GitHub Actions 中的 SSH“主机密钥验证失败” - 但密钥存在于known_hosts 中

我在 GitHub Actions 中遇到了最奇怪的错误,我已经尝试解决这个错误好几个小时了,但我完全没有想法。

我目前使用一个非常简单的 GitHub Action。最终目标是在其他工作流程中通过 ssh 运行特定的 bash 命令。

Dockerfile:

FROM ubuntu:latest

COPY entrypoint.sh /entrypoint.sh

RUN apt update && apt install openssh-client -y
RUN chmod +x entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)

入口点.sh:

FROM ubuntu:latest

COPY entrypoint.sh /entrypoint.sh

RUN apt update && apt install openssh-client -y
RUN chmod +x entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)

动作.yml

name: "SSH Runner"
description: "Runs bash commands in remote server via SSH"
inputs:
  ssh_key:
    description: 'SSH Key'
  known_hosts:
    description: 'Known Hosts'
runs:
  using: 'docker'
  image: 'Dockerfile'
  args:
    - …
Run Code Online (Sandbox Code Playgroud)

ssh continuous-integration continuous-deployment docker github-actions

12
推荐指数
2
解决办法
2万
查看次数

我应该将 .aws-sam 文件包含在我的存储库中吗?

对于任何使用 AWS SAM 在 AWS 中部署微服务的人来说,这是一个简单的问题。您是否将 .aws-sam 文件包含到存储库中?或者你是否 gitignore 这个目录和子目录?

deployment continuous-integration yaml amazon-web-services continuous-deployment

12
推荐指数
2
解决办法
4332
查看次数

由不同操作成功触发的 Github Action

我试图在成功运行不同的操作后触发 Github 操作来运行。

这两个工作流程是:

单元测试操作(首先运行,并且应该触发下面的“后续测试”操作

name: unit-tests

on:
  push:
    branches:
      - '**'

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Setup .NET Core
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: "3.1.x"
      - name: Test
        run: dotnet test src/XXXXXXXXXX
Run Code Online (Sandbox Code Playgroud)

遵循测试操作(这只是一个测试操作)

name: Test action triggered by previous action success

on:
  workflow_run:
    workflows:
      - unit-tests
    types:
      - completed

jobs:
  test-job:
    name: Test Step
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          ref: ${{ github.event.workflow_run.head_branch }}
      - run: echo "The follow on works!!"
Run Code Online (Sandbox Code Playgroud)

问题是,当这是在功能分支而不是默认分支上触发时(因为我希望操作运行所有分支),它不起作用? …

continuous-integration github continuous-deployment github-actions

12
推荐指数
1
解决办法
8770
查看次数