标签: build-pipeline

Jenkins 使用增量 Gradle 构建构建管道

以这个基本的构建管道(带有 gradle 任务)为例:

  1. 编译/运行单元测试(gradle clean build)
  2. 集成测试(gradle integrationTest)
  3. 验收测试(gradleacceptanceTest)
  4. 部署(gradle myCustomDeployTask)

根据 Jez Humble 的“Continuous Delivery”一书,您应该只构建一次二进制文件。所以在上面的理论管道中,在第 1 步中我们清理、编译和构建 WAR,在第 2 步中我们运行集成测试(使用第 1 步中编译的代码),在第 3 步中我们运行验收测试(使用编译后的代码)步骤 1 中的代码),并在步骤 4 中部署 WAR(在步骤 1 中构建)。到现在为止还挺好。

我正在尝试在 Jenkins 中实现这个管道。因为每个作业都有自己的工作区,所以第 2、3 和 4 步最终会重新编译代码并构建 WAR,这违反了只构建一次二进制文件的“持续交付”准则。

为了解决这个问题,我使用了“克隆工作区 SCM ”Jenkins 插件,它将从第一个构建中压缩工作区,并成为构建 2、3 和 4 的工作区源。但是,gradle 仍然重新编译每个构建中的代码步骤,因为它显然使用文件的绝对路径来确定是否需要执行任务。由于插件将文件移动到了新的工作空间,因此绝对路径发生了变化,这让 gradle 认为它需要从头开始而不是执行增量构建。

现在我们可以在 Jenkins 中共享工作区,但由于可能有两个作业针对共享工作区运行,因此这也令人不悦。

那么如何在坚持持续交付、Jenkins 和 Gradle 的最佳实践的同时,使用 Jenkins 和 Gradle 实现上述管道呢?

gradle jenkins build-pipeline continuous-delivery

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

设置 VSTS 构建和发布以忽略项目的特定文件夹

我正在云中的 VSTS 上构建 .net core asp.net 应用程序。设置此选项时,它与我的 .net 框架的其他构建管道不同,因为您不选择要构建的解决方案,而是提供可以找到项目文件的相对(通配符)路径。

对我来说,这最终是:Portal/API/**/*.csproj 问题是,在这条路径中还有一些项目文件,我不想其构建为该特定管道的一部分。

我尝试通过执行以下操作从构建中删除特定路径,^Portal/API/Services/IdentityServer/**/*.csproj但这没有效果。我真的宁愿不必直接指定我想要构建的所有项目,因为然后我将不得不添加应包含的任何新项目(基本上是除身份服务器项目之外的所有项目)。

那么,我可以排除通配符路径包含的项目吗?

更新。 根据这个页面:

https://blogs.infosupport.com/tfs2015-build-tasks-the-wildcard-format-explained/

我应该能够编写,Portal/API/**/*.csproj;-:Portal/API/Services/IdentityServer/**/*.csproj但这不起作用,并且使用此配置,构建存在错误,指出:未找到项目。

build-pipeline azure-devops azure-pipelines

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

Openshift CLI - 使用模板和 oc new-app 更新应用程序

我目前正在使用模板构建和部署应用程序

oc new-app -f ./openshift/template.yaml
Run Code Online (Sandbox Code Playgroud)

我使用的是模板,而不是单独的部署、构建等配置,因为我也希望能够传递参数,例如

oc new-app -f ./openshift/template.yaml --p DATABASE_PW=PW
Run Code Online (Sandbox Code Playgroud)

据我所知,这是不可能使用

oc create -f ./openshift/deploymentconfig.yaml --p SOME_PARAM=TEST
Run Code Online (Sandbox Code Playgroud)

现在我也将其集成到了 Jenkins 的构建管道中。我现在的问题是这样的。这在第一次部署时一切正常,但对于重新部署则不起作用。我可以用 Jenkins 重建应用程序,就像

oc start-build my-app
Run Code Online (Sandbox Code Playgroud)

但这会导致我的模板的更改不会被考虑。我也无法使用 new-app,因为它不会替换现有的配置,从而产生与此类似的错误

--> Creating resources ...
    error: services "my-app" already exists
    ....
--> Failed
Run Code Online (Sandbox Code Playgroud)

有办法解决这个问题吗?也许像命令一样new-app replace所有配置都被替换?我目前正在解决这个问题,方法是使用 shell 文件完全终止该应用程序,然后再次启动它;但这总是会导致几分钟的停机时间,这确实让我很烦恼。

command-line-interface jenkins build-pipeline openshift openshift-client-tools

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

如何在 vsts 中更新构建代理中的系统功能?

我想将构建代理中的“java_home”功能升级到 jdk8,因为这是在我的 CI 构建中集成“Sonarqube 分析”所必需的。如何在 vsts 中更新相同内容?
我想将 java_home 的路径(但在 vsts 中似乎无法编辑)更改为带有 jdk8 的路径,或者仅升级当前文件夹下的 java。 代理

build-agent build-pipeline azure-devops

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

为源重试“FindPackagesByIdAsync”

我有一个dotnet core在本地构建良好的项目,但多次抛出以下错误:

Retrying 'FindPackagesByIdAsync' for source 'https://mycontrol.pkgs.visualstudio.com/_packaging/f8292c33-blah-blah-blah-e5e14bb9ba87/nuget/v3/flat2/microsoft.net.test.sdk/index.json'.
  Response status code does not indicate success: 401 (Unauthorized).
Run Code Online (Sandbox Code Playgroud)

此错误出现在项目中使用的每个包的 VSTS 构建日志中。

打开链接显示:

{
$id: "1",
innerException: null,
message: "Can't find the package 'microsoft.net.test.sdk' in feed 'MyFeeds'.",
typeName: "Microsoft.VisualStudio.Services.NuGet.WebApi.Exceptions.PackageNotFoundException, Microsoft.VisualStudio.Services.NuGet.WebApi",
typeKey: "PackageNotFoundException",
errorCode: 0,
eventId: 3000
}
Run Code Online (Sandbox Code Playgroud)

虽然我NuGet.Config在项目文件夹中没有一个,但我在父文件夹中有一个:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="_nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <add key="_myget.org" value="https://dotnet.myget.org/F/mstestv2/api/v3/index.json" />
  </packageSources>
</configuration>
Run Code Online (Sandbox Code Playgroud)

我也会收到此错误(但仅限于日志中的 1 或 2 个包):

C:\hostedtoolcache\windows\dotnet\sdk\2.1.701\NuGet.targets(121,5): error : Failed to retrieve information about 'specflow' from …
Run Code Online (Sandbox Code Playgroud)

build-pipeline nuget-package-restore .net-core azure-devops

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

Azure 管道在解析管道 YAML(唯一作业名称)时遇到错误

在我的 azure devops 项目中,我使用模板创建了一个管道。这是我的构建管道的主要 yaml 文件

name: Test-$(Date:yyyyMMdd)$(Rev:.r)

resources:
  repositories:
    - repository: api
      type: git
      name: porject/api
      ref: master
    - repository: front
      type: git
      name: project/front
      ref: master
    - repository: strapi
      type: git
      name: project/strapi
      ref: master

trigger:
  branches:
    include:
      - master

pool:
  vmImage: 'ubuntu-latest'
  workspace:
    clean: all

variables:
- name: workingDir
  value: project
- name: tfVersion
  value: 0.12.29
- name: backendServiceGCP
  value: test
- name: backendGCPBucketName
  value: test
- name: tfpath
  value: test
- name: env
  value: dev

stages: …
Run Code Online (Sandbox Code Playgroud)

azure build-pipeline devops azure-devops azure-pipelines

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

Azure Devops 从 PR 触发器构建管道获取源分支

因此,我一直在构建一个构建管道,每当向 master 发出拉取请求时就会触发该管道,因此我们有一个分支策略,使得对 master 分支的唯一更改是通过拉取请求。

我希望构建管道检查 PR 的源分支,并作为构建管道的一部分对源分支进行一些提交。我以为我可以只使用该Build.SourceBranchName变量,但是当触发管道时,SourceBranchName 是 master。所以我无法使用它。

有什么简单的方法可以做到这一点吗?

build-pipeline azure-devops

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

统一构建后复制数据文件夹中的一些额外文件

完成Windows平台的构建(exe)后,我必须将两个文本文件和一个文件夹复制到我的构建数据文件夹中。每次构建时,我都想将这些文件和文件夹从资产复制到构建数据文件夹。这可以统一吗?因为有时我忘记在数据文件夹中复制所需的文件,而我的播放器无法正常工作。

c# build unity-game-engine build-pipeline

2
推荐指数
1
解决办法
3005
查看次数

复制文件任务失败,错误为 Unhandled: Not found SourceFolder

我是 Aure Dev Ops 的新 CI/CD 领域。所以我创建了一个测试 ASP.NET MVC 应用程序。我在 Visual Studio Online 的 git repo 中签入了该应用程序。我的构建管道工作正常,但ms build似乎找不到我发布的文件所在位置的配置。这是我msbuild configurationyml文件:

msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
Run Code Online (Sandbox Code Playgroud)

在我的发布管道中,我使用了copy task以下内容yml

steps:
- task: CopyFiles@2
  displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory)/deploy'
  inputs:
    SourceFolder: '$(build.artifactStagingDirectory)'
    TargetFolder: '$(Build.ArtifactStagingDirectory)/deploy'
Run Code Online (Sandbox Code Playgroud)

这是我尝试部署发布时遇到的错误:

 ##[error]Unhandled: Not found SourceFolder: D:\a\r1\a\$(build.artifactStagingDirectory)
Run Code Online (Sandbox Code Playgroud)

yaml build-pipeline azure-devops azure-pipelines-release-pipeline

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

Azure DevOps 从构建管道上的多个源还原包

今天,我试图在 NuGet 还原阶段修复来自多个来源的构建管道,但无法找到要使用的正确设置。

我有三个不同来源的包,

  1. 公共 Nuget
  2. 私有 Azure DevOps 工件。

.net yaml build-pipeline azure-devops asp.net-core

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

Azure Devops 构建管道不构建可执行文件

我使用以下 Yaml 设置了 azure 构建管道

在此输入图像描述

该项目是一个简单的 hello world 控制台应用程序,用 c# .net core 3.1 编写

当我在本地构建或发布该项目时,我得到以下输出:

  • 第146章
  • 第186章
  • 第416章
  • 4.608 测试Yaml.dll
  • 171.520 测试Yaml.exe
  • 第656章
  • 第154章

但是,通过构建管道发布的工件为我提供了以下文件:

  • 第 140 章
  • 第179章
  • 第394章
  • 4.608 测试Yaml.dll
  • 86.424 测试Yaml
  • 第632章
  • 146 TestYaml.runtimeconfig.json

所以在这里,文件大小更小,更重要的是 TestYaml.exe 丢失了,并被 TestYaml 文件替换。

这应该相当简单,但我不明白缺少什么。

先谢谢您的帮助!

build-pipeline azure-devops dotnetcorecli

0
推荐指数
1
解决办法
1814
查看次数