我的 gitlab ci-cd 配置文件使用许多环境变量。为了设置它们,我使用 gitlab ci-cd 秘密变量。
例如,开发部署部分:
- echo "====== Deploy to dev server ======"
# Add target server`s secret key
- apk add git openssh bash
- mkdir ~/.ssh
- echo $DEV_SERVER_SECRET_KEY_BASE_64 | base64 -d > ~/.ssh/id_rsa
- chmod 700 ~/.ssh && chmod 600 ~/.ssh/*
- echo "Test ssh connection for"
- echo "$DEV_SERVER_USER@$DEV_SERVER_HOST"
- ssh -o StrictHostKeyChecking=no -T "$DEV_SERVER_USER@$DEV_SERVER_HOST"
# Delploy
- echo "Setup target server directories"
- TARGET_SERVER_HOST=$DEV_SERVER_HOST TARGET_SERVER_USER=$DEV_SERVER_USER TARGET_SERVER_APP_FOLDER=$DEV_SERVER_APP_FOLDER pm2 deploy pm2.config.js dev setup 2>&1 …Run Code Online (Sandbox Code Playgroud) continuous-integration continuous-deployment gitlab gitlab-ci-runner devops
我有一个 Bitbucket 管道,它使用 cloudformation 创建 AWS 资源并将网站部署到其中。但即使 cloudform 正确创建堆栈,部署也会失败。我认为问题是当部署发生时,cloudformation S3 存储桶创建可能尚未完成。
我有一个 Hugo 网站,并且创建了一个 bitbucket 管道以将其部署到服务器。它的作用是使用 cloudformation 创建 S3 存储桶来托管网站,然后将 Hugo 网站上传到其中。当我在终端中手动运行管道中的步骤并在每个步骤之间有延迟时,它会成功发生。但是当它发生在 Bitbucket 管道上时,它会给出错误,指出我尝试上传内容的 S3 存储桶不可用。当我检查 AWS 时,该存储桶实际上就在那里。这意味着 Cloudformation 已正常工作。但是当文件开始复制时,存储桶可能无法用于上传文件。这是我的假设。有没有解决这个问题的方法。在本地执行此操作时,我可以在 cloudformation 创建和文件复制这两个命令之间等待。但是在Bitbucket pipeline环境下如何处理呢。以下是我的管道代码。
pipelines:
pull-requests:
'**':
- step:
script:
- aws cloudformation create-stack --stack-name demo-web --template-body file://cloudformation.json --parameters ParameterKey=S3BucketName,ParameterValue=demo-web
- hugo
- aws s3 cp public/ s3://demo-web/ --recursive
Run Code Online (Sandbox Code Playgroud)
如何以正确的方式处理这种情况。对于这种情况有解决方法吗?或者我发现的问题并不是实际问题。
bitbucket amazon-web-services aws-cloudformation devops bitbucket-pipelines
curl -X POST http://xxx.yyy.zzz:5555/job/job-name/build --user john-devops-jenkins:11df3ed41129c5c7da1518e9c3149896de -H 'Jenkins-Crumb:31827a74a160347a641c87ddbc8e3b6e'
Run Code Online (Sandbox Code Playgroud)
上面带有 post 请求的卷曲代码在触发 Jenkins 构建方面绝对工作得很好。
尝试过:
错误:No valid crumb was included in the request
仍然不走运,如何配置 bitbucket hook 到 crumb 的容器头信息或如何通过 url 传递它而不依赖第三方插件?
我确实有一个(Python Flask)应用程序,我想使用 GitLab CI 和 Docker 将其部署到我的 VPS。
在我的服务器上,我希望拥有应用程序的生产版本和暂存版本。它们都需要 MongoDB 连接。
我的计划是在 GitLab 上自动构建应用程序并将其推送到 GitLab 的 Docker 注册表。如果我想将应用程序部署到暂存或生产环境,我会执行docker pull,docker rm和docker run。
计划是将配置(例如secret_key)存储在.production.env(和.staging.env)中并将其传递给应用程序使用docker run --env-file ./env.list
我的服务器上已经安装了 MongoDB,并且应用程序的两个环境应使用相同的 MongoDB 实例,但数据库名称不同(在 中配置.env)。
这是部署我的应用程序的最佳实践吗?你有什么建议?谢谢!
在 Ansible playbook 中,我们可以请求相当于调用
docker image prune
Run Code Online (Sandbox Code Playgroud)
这样:
docker image prune
Run Code Online (Sandbox Code Playgroud)
但是,似乎没有一种方法可以请求--all,即修剪容器中未使用的所有图像。无论如何,默认情况下它不会这样做:
TASK [role : Clean up Docker images] ***
ok: [server] => {
"changed": false,
"images": [],
"images_space_reclaimed": 0
}
Run Code Online (Sandbox Code Playgroud)
显然,images_filters有一些选项与 CLI Docker 选项不直接对应:
用于选择要删除的图像的过滤器值字典。例如,
dangling: true。有关可能的过滤器的更多信息,请参阅docker 文档。
不幸的是,这个选项根本没有记录在案。删除悬空图像是默认设置,那么true甚至会产生什么效果呢?
我如何告诉 Ansible 执行相当于 的操作docker image prune --all?
我创建了一个有状态集,将 Redis 映像部署到 kubernetes 上的 GCP。我面临的挑战是使用单个域名公开它。这样可以按以下顺序访问 Pod - redis.com/first、redis.com/second、redis.com/third
这是 YAML 文件
有状态集
kind: StatefulSet
metadata:
name: app-redis
spec:
selector:
matchLabels:
app: apprenticeship-redis
serviceName: 'redis-service'
replicas: 3
template:
metadata:
labels:
app: app-redis
spec:
terminationGracePeriodSeconds: 10
containers:
- name: app-redis
image: redis
args:
- /etc/redis/redis.conf
volumeMounts:
- mountPath: /etc/redis
name: redis-config
readOnly: false
- name: redis-storage
mountPath: /data
readOnly: false
resources:
requests:
cpu: 50m
memory: 128Mi
limits:
cpu: 150m
memory: 256Mi
ports:
- containerPort: 6379
name: redis
livenessProbe:
exec:
command: ['redis-cli', …Run Code Online (Sandbox Code Playgroud) 我是 gitlab CICD 的新手,我对 gitlab runner 的兴趣感到困惑。Gitlab 已经可以在项目上自动运行 CICD,而无需安装运行程序。所以我需要帮助了解建议的跑步者以及何时何地需要它?
我有一个用于生产 Web 应用程序的 PostgreSQL 11 实例。现在,我想修改连接部分以使用内部 IP 并禁用公共连接。此活动是否会导致我们的数据库出现一些停机时间?
我自己有客人:
GCP 仅更改此实例的网络部分,因此我们可以获得零停机时间。
GCP 将重新配置托管此 PostgreSQL 的实例,这会给我们的数据库带来一些停机时间,这是我们在生产中不希望出现的情况。
提前谢谢!
我需要使用官方的 PowerShell Core Docker 映像来运行 Docker 容器并使其执行 PowerShell 脚本文件。
我知道可以使用 Dockerfile 和 Docker 构建来完成,但在这种情况下不能使用它。
通过阅读文档,我想出了这个,但它似乎不起作用:
docker run -it --rm --entrypoint "/tmp/test.ps1" repo/powershell:latest
docker: Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused "exec: \"/tmp/test.ps1\": stat /tmp/test.ps1: no such file or directory": unknown.
ERRO[0001] error waiting for container: context canceled
Run Code Online (Sandbox Code Playgroud)
错误似乎表明它找不到该文件,但stat "/tmp/test.ps1"手动运行时它工作正常。
我觉得pwsh还应该指定二进制文件,但找不到如何执行此操作的方法。
我需要在 Dockerfile 中传递一个环境变量作为 LABEL,我的 Dockerfile 如下所示:
FROM nginx
LABEL maintainer="blabla"
ENV GROUP="default"
#Checking if Label values can be set from ENV Variables
LABEL group="${GROUP}"
Run Code Online (Sandbox Code Playgroud)
下面的命令传递构建并运行 docker 文件环境变量:
docker build -t nginx:test_label .
Run Code Online (Sandbox Code Playgroud)
docker run -d -e GROUP="mygroup" nginx:test_label
Run Code Online (Sandbox Code Playgroud)
但是在检查容器时,它给了我标签值而default不是 mygroup。
我究竟做错了什么?
devops ×10
docker ×4
bitbucket ×2
gitlab-ci ×2
ansible ×1
docker-run ×1
dockerfile ×1
gitlab ×1
jenkins ×1
kubernetes ×1
postgresql ×1
powershell ×1
redis ×1