标签: devops

常规作业的“if”语句中的 $CI_COMMIT_TAG

我尝试做一个非常基本的 GitLab CI 工作。
我想要:
当我推送到开发时,gitlab 会使用标签“develop”构建 docker 镜像
当我推送到 main 时,gitlab 检查当前提交是否有标签,并用它构建镜像,否则不会触发作业。

Build and publish docker image:
  stage: build
  rules:
    - if:
        ($CI_COMMIT_BRANCH == "main" && $CI_COMMIT_TAG && $CI_PIPELINE_SOURCE == "push")
      variables:
        TAG: $CI_COMMIT_TAG
    - if:
        ($CI_COMMIT_BRANCH == "develop" && $CI_PIPELINE_SOURCE == "push")
      variables:
        TAG: develop
  script:
    - echo $TAG
    - ...<another commands>
Run Code Online (Sandbox Code Playgroud)

但它并没有按预期工作。$CI_COMMIT_TAG - 为空。尽管触发作业(合并提交)的提交有标签。

我发现我发现的解释并不能帮助使用“if”语句实现我的目标。基于此处建议的工作流程的
解决方案也没有帮助。

使用名为 COMMIT_TAG 的变量的直观方式似乎很常见。
但它就是行不通。请好心人向我解释如何实现我的目标吗?

deployment docker gitlab-ci gitlab-ci-runner devops

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

docker 和 php:将依赖项(composer)放入容器中

一点背景:我是 docker 新手,还不知道任何最佳实践。我的任务是创建一个基于 php 的网络服务,我决定使用 docker-compose 进行配置。

因为我们都是优秀的开发人员,所以我们知道 - 现在没有使用 Composer 构建 php 应用程序的方法。

我的问题:

我应该在构建中安装依赖项吗?因此,通过将其添加到我的 Dockerfile 中:

RUN cd /app && composer install --no-interaction --prefer-source --optimize-autoloader
Run Code Online (Sandbox Code Playgroud)

或者我应该在开发过程中安装依赖项并构建包含依赖项的容器映像?


我只知道一种不这样做的方法:在开发机器上本地安装依赖项,然后构建容器。但是“最佳实践”会是什么样子呢?

而且 - 因为我是这个领域的新手 - 我将如何为我的应用程序服务容器运行“composer require some/package”?

顺便一提

我还注意到一条消息“不要以 root/超级用户身份运行 Composer!” 在构建容器时。我添加COMPOSER_ALLOW_SUPERUSER=1到我的 Env 文件(如这里所示),但此消息仍然出现。

是否可以不在 docker 容器中以 root 身份执行 composer install?我可以忽略该消息吗?

提前致谢,菲利普

php composer-php docker docker-compose devops

6
推荐指数
2
解决办法
4540
查看次数

在微服务环境中提供静态文件?

为部署在微服务架构(生产中)中的应用程序提供静态文件的首选方式是什么?

为简单起见,假设我有 3 个应用程序服务器和一个将请求转发到这些服务器的负载平衡器。

  • 负载平衡器是否应该存储文件并根据要求立即提供它们?或者..
  • 负载平衡器是否应该将静态文件请求转发到不同的应用程序实例(每个请求到不同的实例)?

是否有最佳实践?

system-design microservices devops

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

我应该如何将应用程序配置放入我的 Docker 容器中?

我阅读了以下关于“如何将应用程序配置导入到我的 Docker 容器中?”的文章。 https://dantehranian.wordpress.com/2015/03/25/how-should-i-get-application-configuration-into-my-docker-containers/

它总结了 4 个与 2015 年相关的选项。简而言之:

  1. 将配置烘焙到容器中

  2. 通过环境变量动态设置应用程序配置

  3. 通过环境变量动态设置应用程序配置(使用外部 kv 存储)

  4. 通过 Docker Volumes 直接映射配置文件

我想知道现在这些选项是否仍然是唯一可行的,或者是否有任何新的选项/模式可以做到这一点?

谢谢。

configuration docker devops

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

多个 Pod 的单一服务

我有 9 个 pod 正在运行,它们基本上是 9 个不同的应用程序。

是否可以为多个 pod 使用相同的 k8s 服务(LB | 公共 IP),以便我可以通过不同的端口访问它们,但服务的 IP 相同(LB)?

例如像这样:
LB-IP:80 -- 在后端,一个应用程序正在运行,我可以访问它。
LB-IP:8080(与之前的 IP 相同)——我将在后端运行另一个 pod。

**** 每个 pod 的选择器都不同。**

google-cloud-platform kubernetes devops

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

Maven Release Plugin自增自定义格式版本

我希望能够通过在 Maven 发布插件 ( mvn -B release:prepare) 中使用非交互模式来自动增加 Java 项目的发布版本。但是我不想使用默认的 Maven 版本控制架构。

我想使用的架构是<major>.<minor>.<bugfix>-SNAPSHOT. 我确实设法在 pom 文件中执行此操作,但是 Maven 尝试按如下方式增加它:

1.0.0-SNAPSHOT
1.0.1-SNAPSHOT
1.0.2-SNAPSHOT
...
Run Code Online (Sandbox Code Playgroud)

但是我希望能够对此进行控制,虽然有时我确实有错误修正并且上述增量工作,但大多数时候我想发布次要版本,因此增量看起来像这样:

1.0.0-SNAPSHOT
1.1.0-SNAPSHOT
1.2.0-SNAPSHOT
...
Run Code Online (Sandbox Code Playgroud)

java continuous-integration maven devops

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

更新堆栈时,属性 SecurityGroupIds 的值必须是字符串错误列表类型

我在尝试使用以下代码更新堆栈时收到 ROLLBACK_COMPLETE。在事件下,我没有收到错误,因为“属性 SecurityGroupIds 的值必须是字符串列表类型”。请帮助我找到解决方案。

第一个堆栈的 Mycode:

Resources:
  myvpc:
    Type: AWS::EC2::VPC
    Properties:
        CidrBlock: 10.0.0.0/16
        EnableDnsSupport: true
        EnableDnsHostnames: true
        InstanceTenancy: default
        Tags:
            - Key: Name
              Value: myvpc

 myinternetgateway:
    Type: AWS::EC2::InternetGateway
    Properties:
        Tags: 
            - Key: Name
              Value: mygtwy

 mygatewayattach:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties:
        InternetGatewayId: !Ref myinternetgateway
        VpcId: !Ref myvpc

 mysubnet1:
    Type: AWS::EC2::Subnet
    Properties:
        AvailabilityZone: us-east-1a
        VpcId: !Ref myvpc
        CidrBlock: 10.0.1.0/24
        MapPublicIpOnLaunch: true

 Routetable:
    Type: AWS::EC2::RouteTable
    Properties:
        VpcId: !Ref myvpc

 Route:
    Type: AWS::EC2::Route
    DependsOn: myinternetgateway
    Properties:
        DestinationCidrBlock: 0.0.0.0/0
        GatewayId: !Ref myinternetgateway
        RouteTableId: !Ref Routetable

 SubnetARouteTableAssociation: …
Run Code Online (Sandbox Code Playgroud)

cloud amazon-ec2 amazon-web-services aws-cloudformation devops

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

如何在 docker 中安装 kerberos 客户端?

我正在尝试Docker通过 next创建图像Dockerfile。必须安装Kerberos客户端。

Dockerfile

FROM node:latest

RUN export DEBIAN_FRONTEND=noninteractive

RUN apt-get -qq update
RUN apt-get -qq install krb5-user libpam-krb5
RUN apt-get -qq clean

COPY / ./

EXPOSE 3000

CMD ["npm", "start"]
Run Code Online (Sandbox Code Playgroud)

RUN apt-get -qq install krb5-user libpam-krb5来自 Dockerfile 的下一个命令要求我将值输入到交互式提示中,如下所示:

Default Kerberos version 5 realm: 
Run Code Online (Sandbox Code Playgroud)

关键是即使我写了值并按回车,命令也不会终止。出了什么问题以及如何解决?

kerberos docker dockerfile devops

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

Azure 管道错误“Windows PowerShell 处于非交互模式”。

我正在使用 Power Shell 脚本在 Windows 10 Pro 机器上安装 IIS。我正在使用这篇博文来创建脚本。

该脚本使用以下核心安装 IIS。

# * Make sure you run this script from a Powershel Admin Prompt!
# * Make sure Powershell Execution Policy is bypassed to run these scripts:
# * YOU MAY HAVE TO RUN THIS COMMAND PRIOR TO RUNNING THIS SCRIPT!
Set-ExecutionPolicy Bypass -Scope Process

# To list all Windows Features: dism /online /Get-Features
# Get-WindowsOptionalFeature -Online 
# LIST All IIS FEATURES: 
# Get-WindowsOptionalFeature -Online | where FeatureName …
Run Code Online (Sandbox Code Playgroud)

powershell tfs devops azure-devops azure-pipelines

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

错误:与 Azure DevOps 中的指定模式 Azure Function Release Pipeline 匹配的包不止一个

我已经成功地build为我的Azure Functionin配置了管道配置Azure DevOps。现在我正在配置一个带有Azure App Service Deploy任务的发布管道,我总是收到一个错误为“ Error: More than one package matched with specified pattern: d:\a\r1\a\**\*.zip. Please restrain the search pattern.

在此处输入图片说明

有人遇到过这个问题吗?任何帮助都非常感谢。

devops azure-devops azure-functions azure-pipelines azure-pipelines-release-pipeline

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