小编Nic*_*ury的帖子

如何检查环境变量是否存在并获得其值?

我正在写一个shell脚本.在这个shell脚本中,我有一个变量,它接受默认值或环境变量的值.但是,环境变量不必存在.

例如,假设在运行脚本之前,我执行以下操作:

export DEPLOY_ENV=dev
Run Code Online (Sandbox Code Playgroud)

如何告诉脚本搜索此环境变量,并将其值存储在脚本内的变量中.此外,如何告诉脚本如果此环境变量不存在,请存储默认变量?

bash shell

155
推荐指数
5
解决办法
20万
查看次数

AWS ECS:监控服务更新的状态

我正在尝试使用 Fargate 将一组微服务从 Docker Swarm 迁移到 AWS ECS。

我已经创建了一个ECS集群。此外,我还使用 ECR 初始化了存储库,每个存储库都包含一个微服务的映像。

我已经成功地想出了一种创建新图像并将它们推入 ECR 的方法。事实上,随着代码的每次更改,都会构建、标记并推送一个新的 docker 镜像。

此外,我还创建了一个链接到服务的任务定义。该任务定义包含一个容器以及所有必要的信息。此外,其服务定义该任务将在VPC中运行,并链接到负载均衡器,并且具有目标组。我假设每个新部署都使用带有“最新”标签的映像。

到目前为止,根据我的解释,一切都很清楚并且运行良好。

下面是让我困惑的部分。在每次新构建之后,我想更新服务,以便部署具有更新映像的新任务。我使用 cli 通过以下命令来执行此操作:

aws ecs update-service --cluster <cluster-name> --service <service-name>

通常,执行命令后,我会在事件选项卡下监视部署日志,并使用以下命令检查服务的状态:

aws ecs describe-services --cluster <cluster-name> --service <service-name>

最后,我尝试模拟新创建的图像包含错误代码的情况。因此,新任务将无法部署。我所目睹的是 Fargate 将继续尝试(不间断)部署新任务。此外,除了事件日志之外,describe-services除了 Fargate 正在执行的操作(例如,注册/取消注册任务)之外,该命令不包含相关信息。令我惊讶的是,我找不到任何指示 Fargate 或服务停止部署并回滚到现有部署的机制。

我找到这篇文章(https://aws.amazon.com/blogs/compute/automating-rollback-of-failed-amazon-ecs-deployments/),它提供了一个解决方案。然而,这是一个相当复杂的问题,并且假设每个新部署都是由新任务定义触发的,这不是我想要的。

因此,考虑到我上面的描述,我希望你能回答以下问题:

1)使用CLI命令(出于自动化目的)是否有一种方法可以指示Fargate在几次尝试部署新任务失败后自动停止当前部署?

2)使用CLI命令,有没有办法监控部署的当前状态?例如,当对Docker swarm上的服务进行服务更新时,终端会生成更新过程的实时日志

3) 部署失败后,Fargate 是否有办法发出错误代码、标志或消息?

amazon-web-services amazon-ecs continuous-deployment aws-fargate

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

DOCKERFILE:运行多个CMD.(启动NGINX和PHP)

我有一个dockerfile设置NGINX,PHP,添加一个Wordpress存储库.我想在启动时启动PHP和NGINX.但是,我没有这样做.我尝试在CMD数组中添加两个命令,我也尝试将它们放在shell文件中并启动shell文件.没有任何效果.下面是我的Dockerfile

FROM ubuntu:16.04

WORKDIR /opt/

#Install nginx
RUN apt-get update
RUN apt-get install -y nginx=1.10.* php7.0 php7.0-fpm php7.0-mysql

#Add the customized NGINX configuration
RUN rm -f /etc/nginx/nginx.conf
RUN rm -f /etc/nginx/sites-enabled/*

COPY nginx/nginx.conf /etc/nginx/
COPY nginx/site.conf /etc/nginx/sites-enabled

#Copy the certificates
RUN mkdir -p /etc/pki/nginx
COPY nginx/certs/* /etc/pki/nginx/
RUN rm -f /etc/pki/nginx/placeholder

#Copy the build to its destination on the server
RUN mkdir -p /mnt/wordpress-blog/
COPY . /mnt/wordpress-blog/

#COPY wp-config.php
COPY nginx/wp-config.php /mnt/wordpress-blog/

#The command to run the container
CMD ["/bin/bash", …
Run Code Online (Sandbox Code Playgroud)

php nginx docker dockerfile

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

Azure CLI:通过一个命令删除存储库中所有未标记的图像

我将 Docker 映像存储在 Azure 上的私有存储库中。每次我将具有相同标签(例如最新)的图像推送到该存储库时,前一个图像就会变为未标记的,但仍保留在存储库中。这导致存储库中堆积了大量未标记的图像。我想要一个使用 azure cli 的命令来一次性删除所有未标记的图像。

例如,输入以下命令:

az acr repository show-manifests -n myRegistry --repository myRepo

返回 d24-staging-fuzzy-search-srv 存储库的几个清单:

[ { "digest": "sha256:blablabla1", "tags": null, "timestamp": "t1" }, { "digest": "sha256:blablabla2", "tags": null, "timestamp": "t2" }, { "digest": "sha256:blablabla3", "tags": [ "latest" ], "timestamp": "t3" }]

我想在 azure cli 中使用一个命令来删除所有具有“null”标签的 mainfest,并保留具有“latest”标签的 mainfest

azure azure-cli azure-container-registry

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

NodeJS AWS Lambda:连接丢失:服务器关闭了连接

我在 AWS 上部署了一个 lambda 函数。该 lambda 函数构建在 NodeJS 之上。该 lambda 函数包含多个脚本,每个脚本都由某个事件触发。最近,我在随机时间和执行随机脚本期间收到以下错误(我找不到模式)。

{
    "errorType": "Error",
    "errorMessage": "Connection lost: The server closed the connection.",
    "code": "PROTOCOL_CONNECTION_LOST",
    "fatal": true,
    "stack": [
        "Error: Connection lost: The server closed the connection.",
        "    at Protocol.end (/var/task/node_modules/mysql/lib/protocol/Protocol.js:112:13)",
        "    at Socket.<anonymous> (/var/task/node_modules/mysql/lib/Connection.js:97:28)",
        "    at Socket.<anonymous> (/var/task/node_modules/mysql/lib/Connection.js:525:10)",
        "    at Socket.emit (events.js:203:15)",
        "    at Socket.EventEmitter.emit (domain.js:448:20)",
        "    at endReadableNT (_stream_readable.js:1143:12)",
        "    at process._tickCallback (internal/process/next_tick.js:63:19)"
    ]
}
Run Code Online (Sandbox Code Playgroud)

我做了一些研究,发现这个错误是由MySql生成的。然而,该错误发生在执行甚至不以任何方式与 MySQL 交互的脚本期间。

我为 MySQL 创建了一个包装器,以便承诺它的一些功能。下面是代码:

const util = require('util');

let lib = { …
Run Code Online (Sandbox Code Playgroud)

mysql node.js aws-lambda

6
推荐指数
0
解决办法
1226
查看次数

ELASTICSEARCH:裂脑

假设我们有两个ElasticSearch服务器A和B,它们都可以成为主服务器.假设A是主人.还假设minimum_master_nodes属性也设置为1.

如果服务器A(主服务器)由于某种原因崩溃,则B成为主服务器.当A再次启动并运行并加入群集时,它是否会再次作为主服务器加入?我不明白为什么会出现裂脑.如果B成为主,然后A重新加入集群,那么如果B成为主人,为什么A也会成为主人?

configuration elasticsearch

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

如何将环境变量传递给systemd启动的服务

我有一个使用NodeJs构建的nodeJS服务.此服务需要将一些环境变量传递给它.此外,我创建了一个systemd单元文件,从systemctl启动它.出于某些奇怪的原因,当使用systemctl启动时,该服务不会读取环境变量.例如,一个环境变量是HOST,其中包含将要绑定sails应用程序的IP.但是,如果我使用sails lift节点app.js启动服务,它会读取环境变量.这是单位文件:

[Unit]
Description=project

[Service]
ExecStart=/usr/bin/node /mnt/project/app.js
Restart=always
StandardOutput=syslog

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

我尝试了一切.我将环境变量添加到/ etc/environment并将单元文件指向它,我还将它们添加到单元文件中,但没有任何效果.

ubuntu environment-variables systemd systemctl

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

Sails.js:无法为单元测试目的存根帮助程序

节点版本:v12.18.3帆版本 sails :1.2.3


执行单元测试时,我无法存根sails helper。我有一个助手来处理与数据库的所有通信。此外,我有一个 API,它使用这个助手。在我的测试中,我试图使用 sinon 来存根助手:

API:

fn: async function (inputs, exits) {
 // Stuff done here
 // I need to stub this helper
 let result = await sails.helpers.arangoQuery.with({
      requestId: REQUEST_ID,
      query: query,
      queryParams: params
    });
  
}
Run Code Online (Sandbox Code Playgroud)

我的测试:

describe('Get Organization', () => {
    it('Server Error - Simulates a failure in fetching the data from ArangoDB', (done) => {
        sinon.stub(sails.helpers, 'arangoQuery').returns(null, {status: "success"});

        supertest(sails.hooks.http.app)
            .get('/organization')
            //.expect(200)
            .end((error, response) => {
              return done()
            }
      })
}) …
Run Code Online (Sandbox Code Playgroud)

unit-testing stub sinon sails.js

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

readFileSync不适用于我.我在设置为字符串之后尝试打印输入但很奇怪

我是Node.js的新手,我正在努力学习.我有一个简单的任务来执行以下操作:-read一个文件(提供购买第一个命令行参数). - 打印文件中的行数. - 我正在使用readFileSync方法.

代码正在运行,但输出很奇怪.我尝试打印每个语句,我认为问题在于读取数据.任何人都可以告诉我我哪里错了?

    function numLines(){
      var fs = require('fs');
      var num = 0;
      var contents = fs.readFileSync(process.argv[0]);
      console.log(contents.toString());

      return num;
    }
Run Code Online (Sandbox Code Playgroud)

忽略return语句,请关注readFileSync.在打印内容时,打印的文本中充满了奇怪的字符,就像读取错误一样

javascript readfile node.js

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