我正在使用gitlab-ci在一些远程服务器上部署一些Docker堆栈文件。构建映像,推送到注册表,然后拉并部署,效果很好。
但是,我不知怎么地陷入了一个更简单的用例中-我只想将我在gitlab上的存储库推送到远程服务器上的文件夹中。目前,我有一个cron作业,每5分钟执行一次git pull,但我希望将其保存在gitlab-ci文件中,以便最终添加一些测试,等等。
这是我目前的尝试。我在这一点上已经尝试了很多变化。
deploy:
stage: deploy
only:
- master
script:
- apk update && apk add git
- echo $CI_PROJECT_DIR
- if [ ! -d .git ] ; then git clone ${CI_REPOSITORY_URL} . ; else echo "Respository already cloned" ; fi
- git remote set-url origin ${CI_REPOSITORY_URL}
- git pull origin ${CI_COMMIT_REF_NAME}
- git reset --hard ${CI_COMMIT_SHA}
- git submodule init
- git submodule update
- git reset --hard --recurse-submodule HEAD
- git clean -f
- git submodule foreach --recursive git clean -f
- ls $CI_PROJECT_DIR ; echo
我的配置:
[[runners]]
name = "Docker Runner"
url = "https://gitlab.com/"
token = ""
executor = "docker"
[runners.custom_build_dir]
[runners.docker]
tls_verify = false
image = "docker:latest"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/var/run/docker.sock:/var/run/docker.sock",
"/mnt/airflow/dags:/builds",
"/cache"]
shm_size = 0
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
我的代码被添加到主机上的/ mnt / airflow / dags目录中,但是我想摆脱它的一些子文件夹(完整路径为/ dags / runner_id / 0 / project_name / project)。我的目标是使路径为/ mnt / airflow / dags / project。
我也尝试过使用Shell执行器,但是由于我的gitlab Runner是一个docker容器,它只是将数据添加到了该容器中,所以没有看到将卷安装到主机的示例。
答案 0 :(得分:0)
使用 gitlab-runner
可以轻松(基于文件)部署两种方法您已经提到了这一点。使用shell执行程序在目标主机上具有 gitlab-runner ,然后只需将文件复制到目标目录即可。正确设置权限可能有些棘手,但除此之外,它非常简单。
如果只能在容器中运行运行程序,则仍然可以通过将部署的目标目录绑定安装到运行程序的容器中来使用此方法
为此,gitlab服务器必须能够通过SSH到达部署主机。
该脚本可能看起来像这样:
before_script:
- apt-get update
- apt-get --yes install openssh-client rsync
# Add host key of webserver to known hosts file
- mkdir -p ~/.ssh
- echo "|1|NBu3XQDeVt3ea6yoK55GC8esO4w=|Jn7zY5dvsrGno2yxK5EzZNyRJSI= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGaaaexlUD2C8fbxfUUv6651J+Dc+KXYZHlM+INppRmefRwNyAsmEQO2YobNpisleXqeJeapUyQuu0GIwhKNzrM=" >> ~/.ssh/known_hosts
# Run ssh-agent (inside the build environment)
- eval $(ssh-agent -s)
# Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store
- echo "$SSH_PRIVATE_KEY" | ssh-add -
script:
- rsync -az --delete --omit-dir-times . gitdeploy@web.my:/var/www/www.my.site/
答案 1 :(得分:0)
我禁用了共享运行程序,并注册了一个gitlab-runner(docker映像,docker executor)。我编辑了toml文件,并将一个卷从我的主机装载到下面的$ TARGET_DIR。完全按照我的要求工作
stages:
- deploy
variables:
TARGET_DIR: /home/gitlab-runner/$CI_PROJECT_NAME
deploy_airflow:
stage: deploy
only:
- master
script:
- apk update && apk add rsync
- mkdir -pv $TARGET_DIR
- rsync -a --delete ./ $TARGET_DIR