标签: devops

在容器中或不在容器中部署具有微服务架构的Go应用程序?

我是 DevOps 的新手,特别是使用 golang 和微服务架构。

我想知道 go 应用程序是否应该部署在容器(Docker)中。在这个例子中,我有一个用微服务架构构建的系统。例如,我有 2 个 Web 服务,A 和 B。此外,我还有另一个 Web 服务器,充当这两个服务前面的网关。

A 和 B 都需要访问数据库,例如 MySQL。A 处理 A 表,B 处理 B 表。

我知道在 Go 中,源代码被编译成单个可执行二进制文件。因为我这里有 3 个服务,所以我有 3 个二进制文件。所有三个都作为公开 JSON REST API 的 Web 服务器运行。

我的问题是:

  • 我可以将这些服务器一起部署在一台运行不同端口的主机上吗? 例如,如果我的主机获得 IP xxxx,则我的网关可以在 xxxx:80 中运行,A 在端口 81 中运行,B 在端口 82 中运行。A 和 B 将与同一主机外部或内部的 MySQL 服务器通信。这是一个好的做法吗?持续部署可以用于这种实践吗?

  • 为什么我应该在 Docker 等容器内部署和运行这些二进制文件? 我知道自从几年前发布以来,Docker 已经找到了轻松集成到开发工作流程中的方法。当然,使用 Docker 并不只是将代码编译成二进制文件然后将其移动到部署服务器那么简单。使用 Docker,我们必须将可执行文件放入容器中,然后将容器也移动到部署服务器。

  • 如果不使用 Docker,可扩展性和高可用性怎么样? 我可以复制我的服务并使用负载均衡器在不同的主机上同时运行它们吗?这样我应该在一台主机上部署A、B和网关,在另一台主机上部署另一个A、B和网关,然后在它们前面设置负载均衡器。A、B 和网关分别运行在 80、81、82 端口。这样,我就可以拥有数千个以虚拟机或 LXD 容器形式存在的节点,分布在数百个裸机上,使用简单的 bash 脚本和 ssh 进行部署,如果情况变得复杂,则可以使用 Ansible 进行部署。是还是不是? …

go kubernetes microservices devops docker-container

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

如何在 Azure DevOps 中按用户和日期报告记录的任务时间?

我们公司最近开始使用 Azure DevOps。今天早上,我不记得我是否已输入昨天的工作时间来完成某项任务。我找到了提供的预设查询,但没有一个显示按天(日期)输入的小时数。

Azure DevOps 中是否有报告/查询提供您按天和任务输入的(在用户级别)小时数。

注意:在我们的 ENV 中,我们没有多人报告同一任务的时间,因此如果我们可以获得每天和任务的小时数,我们可以假设用户。

devops azure-devops

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

How to locate apk file using bitbucket-pipelines?

I'm using BitBucket-pipelines for Android CI. I'm trying to export the artifact (generated apk) to the downloads section of the project.

My bitbucket-pipelines.yml is as follows, but it can't locate the apk file

image: openjdk:8

pipelines:
default:
- step:
    caches:
      - gradle
      - android-sdk

    script:
      # Download and unzip android sdk
      - wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip
      - unzip -o -qq android-sdk.zip -d android-sdk

      # Define Android Home and add PATHs
      - export ANDROID_HOME="/opt/atlassian/pipelines/agent/build/android-sdk"
      - export PATH="$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$ANDROID_HOME/platform-tools:$PATH"

      # Download packages.
      - …
Run Code Online (Sandbox Code Playgroud)

continuous-integration android bitbucket devops bitbucket-pipelines

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

如何使用 Azure DevOps 控制我的内部版本号?

我对 Azure DevOps 感到非常沮丧。在我的内部版本号格式中,我希望同时拥有

  • 当我更新我的主要版本和次要版本时,数字重新开始为 0。
  • 但我也希望有一个真正的内部版本号,无论我的内部版本号格式是什么,它都不会重置。该构建号也可以由我的项目的所有构建管道共享。是否可以?

我没有使用 YAML 格式。我使用带有选项页面的经典界面来设置我的构建格式。此时此刻我有这个:

在此输入图像描述

它工作,除了每个月 r 数字从 0 重新启动。我希望它继续。

编辑

在此输入图像描述

我还没有决定我的最终格式。我想了解所有的可能性。现在我发现了这个$(BuildID)房产,我还有另一个问题。是否有可能有类似于$(Rev:r)变量的东西,但只检查我的内部版本号的左侧部分。

例子:

4.16.$(SequenceFor[4.16]).$(BuildID)
Run Code Online (Sandbox Code Playgroud)

事实上我想手动设置Major和Minor版本,让系统一一更新Build并使用全局的Revision $(BuildID)。

devops azure-devops azure-pipelines

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

如何让pyspark在emr集群上运行代码

我们使用 python 和 pyspark api 来在 Spark 集群上运行简单的代码。

from pyspark import SparkContext, SparkConf
conf = SparkConf().setAppName('appName').setMaster('spark://clusterip:7077')
sc = SparkContext(conf=conf)

rdd = sc.parallelize([1, 2, 3, 4])
rdd.map(lambda x: x**2).collect()
Run Code Online (Sandbox Code Playgroud)

当我们在本地并使用 docker 设置 Spark 集群时,它就可以工作。

我们现在想要启动一个 emr 集群并测试相同的代码。并且似乎 pyspark 无法连接到 emr 上的 Spark 集群

我们从我们的机器向 Spark Master 打开端口 8080 和 7077

我们正在穿越防火墙,但似乎没有任何东西在侦听端口 7077,并且我们的连接被拒绝。

我们发现这解释了如何使用 cli 提供作业,但我们需要直接从驱动程序上的 pyspark api 运行它。

我们在这里缺少什么?

如何启动 emr 集群并使用该集群在 python 上本地运行 pyspark 代码?

编辑:从主站本身运行此代码是有效的与建议的相反,当使用 ssh 连接到主站并从终端运行 python 时,完全相同的代码(对主站 IP 进行适当调整,因为它是同一台机器)有效。没有问题没有问题。鉴于文档明确指出了其他情况,这有何意义?

port amazon-emr apache-spark pyspark devops

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

Azure DevOps 中未显示代码覆盖率选项卡

我在 Azure DevOps 下有一个相对简单的测试项目,我想生成代码覆盖率。

这有效...有点。我明白了:

Azure DevOps 代码覆盖率

我得到了我需要的文件(至少我认为)但是选项卡丢失了。

我有这三个步骤:

执行 .NET 测试任务 安装报告生成器 运行报告生成器以转换 (-reporttypes:HtmlInline_AzurePipelines;Cobertura") 发布结果

但选项卡没有显示?有任何想法吗?

    - stage: Run_Unit_tests 
  jobs:
  - job: 'Tests'
    pool: 
      vmImage: 'windows-latest'
    variables:
      buildConfiguration: 'Release'
    continueOnError: true
    steps:
    - task: DotNetCoreCLI@2
      inputs:
        command: custom
        custom: tool
        arguments: install --tool-path . dotnet-reportgenerator-globaltool
      displayName: Install ReportGenerator tool

    - task: DotNetCoreCLI@2
      displayName: Test .NET
      inputs:
        command: test
        projects: '**/*Test/*.csproj'
        arguments: '--configuration $(buildConfiguration) --logger trx --collect:"XPlat Code Coverage"'
      condition: succeededOrFailed()

    - task: reportgenerator@4
      inputs:
        reports: '$(Agent.TempDirectory)\**\coverage.cobertura.xml'
        targetdir: '$(Build.SourcesDirectory)\coverlet\reports'
        verbosity: 'Verbose'
    - …
Run Code Online (Sandbox Code Playgroud)

azure devops azure-devops

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

使用 lambda 函数调整图像大小并将图像从一个 s3 移动到另一个 s3

我想做的事

  • 我有3个桶。我想在图像上传到bucket1时触发lambda函数。
  • lambda 函数将调整该图像的大小 (500x500) 并将调整后的图像保存在 Bucket2 中。
  • Bucket1上的主镜像将备份到Bucket3中。
  • 然后bucket1上的主图像将被删除。

到目前为止我已经做了什么

  • 编写了一个 lambda 函数,可以在存储桶中移动图像。

  • 让 S3 触发 lambda 函数

我的问题出在哪里

  • 我正在使用 PIL 调整图像大小。但PIL模块不在python STL中。所以我用站点包压缩了我的代码并且能够运行。但错误说找不到文件。文件密钥 image/myimage.jpg 的示例

  • 虽然我遵循了教程,但如果我尝试使用 lambda 层而不是每次都进行压缩,似乎找不到 PIL 模块。

代码


import boto3
import os
import sys
import uuid
from PIL import Image
import PIL.Image

s3_client = boto3.client('s3')

def resize_image(image_path, resized_path):
    with Image.open(image_path) as image:
        image.thumbnail((500, 500))
        image.save(resized_path)

def lambda_handler(event, context):
    #
    # giving a key error here event['Records']
    #
    for record in event['Records']: 
        bucket = 'mahabubelahibucket1'
        key = …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 python-3.x aws-lambda devops

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

Semantic-release 配置为仅从 master 发布

\n

[16:07:15] [语义发布] \xe2\x80\xba \xe2\x84\xb9 运行语义发布版本 17.0.4
\n [16:07:18] [语义发布] \xe2\x80 \xba \xe2\x9c\x94 从“@semantic-release/npm”加载插件“verifyConditions”
\n [16:07:19] [semantic-release] \xe2\x80\xba \xe2\x9c\x94 加载插件来自“@semantic-release/git”的“verifyConditions”
\n [16:07:19] [semantic-release] \xe2\x80\xba \xe2\x9c\x94 从“@semantic-release/”加载插件“analyzeCommits” commit-analyzer"
\n [16:07:19] [semantic-release] \xe2\x80\xba \xe2\x9c\x94 从“@semantic-release/release-notes-generator”加载插件“generateNotes”\
n [16:07:19] [语义发布] \xe2\x80\xba \xe2\x9c\x94 从“@semantic-release/changelog”加载插件“准备”
\n [16:07:19] [语义-发布] \xe2\x80\xba \xe2\x9c\x94 从“@semantic-release/npm”加载插件“准备”
\n [16:07:19] [语义发布] \xe2\x80\xba \xe2 \x9c\x94 从“@semantic-release/git”加载插件“准备”
\n [16:07:19] [semantic-release] \xe2\x80\xba \xe2\x9c\x94 从“@semantic-release/git”加载插件“发布” “@semantic-release/npm”
\n [16:07:20] [semantic-release] \xe2\x80\xba \xe2\x9c\x94 从“@semantic-release/gitlab”加载插件“publish”\
n [16:07:20] [语义发布] \xe2\x80\xba \xe2\x9c\x94 从“@semantic-release/npm”加载插件“addChannel”
\n [16:07:20] [语义-发布] \xe2\x80\xba \xe2\x9c\x94 从“@semantic-release/github”加载插件“addChannel”
\n [16:07:27] [semantic-release] …

git node.js devops semantic-release

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

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

将 Azure DevOps 发布管道(经典编辑器)输出变量传递到同一阶段中的多个作业或外部的多个阶段

我正在使用发布管道经典编辑器,并且需要将任务中生成的输出变量传递到同一阶段中的多个作业或外部阶段。目前,这个输出变量仅在同一个作业中可用,我必须在多个作业和阶段中编写相同的任务,我觉得这是一种冗余。有什么办法可以实现吗?

devops azure-devops azure-pipelines-release-pipeline azure-devops-rest-api

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