我正在使用heroku和git在rails网站上开发ruby.
我应该使用哪些工具和功能来设置以下简单的开发过程?
代码>登记>自动测试>自动部署
你会怎么做?
git continuous-integration ruby-on-rails heroku continuous-deployment
使用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
我们目前正在使用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
在部署场景中,我需要在主机列表上创建和运行jenkins任务,即创建类似参数化任务(其中ip地址是参数)或具有HOST轴的Multijob插件上的任务,但在多个并行运行仅2个1主机.
其中一个选项可能是使用主机列表运行ansible,但我希望分别查看每个主机的状态,并在需要时重新启动jenkins作业.
主要选项是使用Job DSL Plugin或Pipeline Plugin,但在这里我需要帮助来理解应该使用dsl groovy代码的类/方法来实现这一点.
任何人都可以帮忙吗?
continuous-deployment jenkins jenkins-job-dsl devops jenkins-pipeline
我有一个工作群设置和滚动更新部署.由于我必须在部署后执行某些任务(如数据库迁移),因此我向堆栈添加了"管理器"服务.这项服务仅限于节点管理器 - 所以我总能找到它.
要获取当前的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) 我一直在教育自己关于monorepos,因为我相信这对我的团队和我们项目的现状是一个很好的解决方案.我们有多个Web产品(客户端门户,内部门户,API,核心共享代码).
我正在努力寻找我想要找到的答案的版本.
当您的所有项目和产品都在monorepo内时,版本控制策略是什么?
从CI的角度来看,当您在项目A中提交某些内容时,是否应该在所有项目中启动整套测试以确保没有任何损坏,即使没有必要对依赖/共享模块进行更改?
versioning continuous-integration continuous-deployment monorepo
我在 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
我在 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
对于任何使用 AWS SAM 在 AWS 中部署微服务的人来说,这是一个简单的问题。您是否将 .aws-sam 文件包含到存储库中?或者你是否 gitignore 这个目录和子目录?
deployment continuous-integration yaml amazon-web-services continuous-deployment
我试图在成功运行不同的操作后触发 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
docker ×2
github ×2
.net ×1
automation ×1
batch-file ×1
deployment ×1
devops ×1
docker-swarm ×1
f5 ×1
git ×1
heroku ×1
jenkins ×1
monorepo ×1
powershell ×1
psexec ×1
ssh ×1
versioning ×1
yaml ×1