标签: devops

使用多种颗粒瞄准盐奴

在我们的基础设施中,我们在 minion 上设置了多个grain,包括“环境”和“组件”grain。基于此,可以有多个具有相同组件名称的 Minion,每个 Minion 位于不同的环境中。我希望能够基于多个grain来选择minions,而不必在master上定义多个节点组。

我努力了:

salt -G 'component:api,environment:prod' test.ping
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用,我相当广泛地查看了他们的文档,但没有找到这种类型的小兵目标的示例。

这是否可能,如果可以,我将如何去做?

automation salt-stack devops

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

以非 root 用户身份运行 docker 或以 root 用户身份在 tomcat 上运行 jenkins

我正在尝试使用 docker-maven 插件构建 docker 映像,并计划使用 jenkins 执行 mvn 命令。我将 jenkins.war 部署在 tomcat 实例上,而不是作为非 root 用户运行的独立应用程序。问题是 docker 需要以 root 用户身份运行,因此 maven 命令需要以 root 用户身份运行,因此 jenkins/tomcat 需要以 root 用户身份运行,这不是一个好的做法(尽管我的非 root 用户是也是 sudoer 所以我想不会太重要)。

所以底线,我看到两种解决方案:要么以非root用户身份运行docker(并且需要如何执行此操作的帮助),要么需要以root身份运行jenkins(并且不确定如何实现这一点,因为我更改了环境变量 /config 和仍然没有切换到root)。

对于选择哪种解决方案以及如何实施有什么建议吗?

tomcat maven jenkins docker devops

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

Capistrano 和 Jenkins 之间的区别

我可以使用 Jenkins 和 Capistrano 部署 JAVA Web 应用程序。如果我的 CI 工具是 Jenkins,它有远程部署插件,为什么我要使用 Capistrano 进行部署?我想了解 Jenkins 和 Capistrano 的优缺点。

deployment continuous-integration capistrano jenkins devops

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

气流中的 DAG 级别服务级别协议

我知道目前 SLA 是通过一个简单的方法来实现任务的

sla=datetime.timedelta(hours=1)

在任务实例内,但我想知道是否有一种方法可以在气流中实现 DAG 级别 SLA,如果 dag 中的所有任务未在给定的时间增量内完成,则会发送警报?

最好的问候,阿里

python devops airflow

5
推荐指数
0
解决办法
2628
查看次数

如何在js脚本中读取docker环境变量?

我有一个托管在节点 Docker 容器上的 React 应用程序。我运行它并向它传递一个环境变量

 docker run -t -e "ADMIN_HOST_ENV=http://myapp.app:443/api" -p 3000:3000 "myapp"
Run Code Online (Sandbox Code Playgroud)

如何在应用程序中获取“ADMIN_HOST_ENV”环境变量?

javascript docker reactjs docker-compose devops

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

GitLab Pipeline 无法连接到 Kubernetes

当我执行视频显示的管道作业时,它失败并给出一条消息:

错误:准备失败:连接到 Kubernetes 时出错:配置无效:未提供配置

这是故意的吗?我错过了任何配置吗?

kubernetes 是为我的跑步者和我正在处理的项目配置的,但我没有看到任何配置

gitlab kubernetes devops

5
推荐指数
0
解决办法
1119
查看次数

未检测到 Vault 令牌助手?

问题:

我的 docker 镜像中有三个文件,vault:0.10.2位于以下位置:

/home/myuser/token_helper:Go 中的令牌助手二进制文件,根据本文档实现令牌助手接口

/home/myuser/vault_startos.exec("vault", "operator", "init"):运行的Go 脚本os.exec("vault", "server", "-config=myconfig.hcl")

/home/myuser/.vault:令牌帮助程序配置文件指定令牌帮助程序二进制位置,我已导出VAULT_CONFIG_PATH以指向此路径。文件内容如下token_helper = "/home/myuser/token_helper":

我看到的问题是在运行vault_start脚本时出现以下错误:

failed to get token helper: error expanding config path "": exec: "getent": executable file not found in $PATH
Run Code Online (Sandbox Code Playgroud)

到目前为止已完成的调试:

这个错误似乎不正确。which getent返回/usr/bin/getent,并且图像$PATH包含它,证明两者都存在。另外,配置路径不是"",它被设置为/home/myuser/.vault但 Vault 显然将其检测为空。

我已将该错误输出跟踪到Vault 目录中的此文件command: 。$HOME根据该代码块,只有在未设置时才会出错,但我已经确认已$HOME在 shell 中设置了该值。

此外,我已经指定了 Vault 所要求的所有内容,以便根据本文档 …

go devops alpine-linux hashicorp-vault

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

如何阻止 Jenkins 作业在声明性管道中获取执行器?

如果另一个作业(具有特定名称)已经在运行,如何防止作业抢占执行程序?

我正在寻找类似Build Blocker 插件但用于声明式管道的东西。

我已经尝试过可锁定资源插件,但它并不能阻止作业获取执行器,作业获得执行器,然后等待资源释放以实际执行任何操作。

我们有数百个作业,因此手动配置每个作业是不切实际的,而且也很难维护。

我见过这些类似的问题,但我尝试使用相对较新的声明性管道来做到这一点

jenkins devops

5
推荐指数
0
解决办法
563
查看次数

端口号未隐藏在 nginx 反向代理(下一个 js 服务器)中

我正在尝试通过 create-next-app 部署 next-js 应用程序,我有一个像这样的自定义 Express 服务器 -

const express = require('express')
const next = require('next')
const dev = process.env.NODE_ENV !== 'production'
const nextApp = next({ dev })
const handle = nextApp.getRequestHandler()

const fs = require('fs')

nextApp.prepare()
.then(() => {
    const server = express ()


    let port = 3000;

    let options = {
        key: fs.readFileSync('some key..', 'utf-8'),
        cert: fs.readFileSync('some cert..', 'utf-8'),
    };


    server.get(
        ...
    )


    let app = https.createServer(options, server)
    .listen((port), function(){
    console.log("Express server listening on port " + port); …
Run Code Online (Sandbox Code Playgroud)

proxy nginx node.js devops next.js

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

将 CRA 创建的 React App(创建 React App)部署到具有不同 URL 路径的不同环境?

问题:

我们有一个 CRA(创建 React App)应用程序,我们需要将它部署到许多不同的环境中。我们正在使用Kubernetes来生成这些环境,因此我们将拥有许多环境,数量不是固定的。

问题是这些环境必须在相同的域名下并且必须具有相同的路径结构。(这是一项业务要求,我们无法影响它)。

环境示例:

https://www.example.com/company/app-env01/react_application/
https://www.example.com/company/app-env02/react_application/
https://www.example.com/company/app-env03/react_application/
https://www.example.com/company/app-env-foo/react_application/
https://www.example.com/company/app-env-bar/react_application/
https://www.example.com/company/app/react_application/
Run Code Online (Sandbox Code Playgroud)

所以固定结构是: https://www.example.com/company/app[-____]/react_application/

使其在单个环境中工作的方法是在脚本中指定PUBLIC_URLpackage.json build:

https://www.example.com/company/app-env01/react_application/
https://www.example.com/company/app-env02/react_application/
https://www.example.com/company/app-env03/react_application/
https://www.example.com/company/app-env-foo/react_application/
https://www.example.com/company/app-env-bar/react_application/
https://www.example.com/company/app/react_application/
Run Code Online (Sandbox Code Playgroud)

这仅适用于一个环境(env01在这种情况下),但我们需要将单个构建工件(静态文件包)部署到许多不同的环境,这些环境具有不同的PUBLIC_URLs。

这是否可以在不为每个环境构建应用程序的情况下实现?

我们如何构建工件:

我们的部署工件是一个Docker 镜像,它只是Nginx为之前构建的React 静态文件提供服务。

我们如何执行路由:

浏览器正在访问我们的Kubernetes Ingress,它剥离了路径并将请求转发到运行Nginx的 Docker 容器(在 K8S Pod …

docker reactjs devops create-react-app

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