GitHub Action Deploy Docker to server
1. 写在前面的
接触GitHub Action有一段时间了,发现这是一个神器,现在的环境是通过Action自动部署到k8s,部分环境因为客户的服务器还是用的直接部署或者docker环境,就想能否通过Action自动部署docker,然后就有了下面的实践过程和结论。
2. 参考内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
- name: Deploy
uses: appleboy/ssh-action@master
with:
host: $
username: $
password: $
port: $
script: |
docker stop $(docker ps --filter ancestor=$ -q)
docker rm -f $(docker ps -a --filter ancestor=$:latest -q)
docker rmi -f $(docker images $:latest -q)
docker login --username=$ --password $ registry.cn-hangzhou.aliyuncs.com
docker pull $:latest
docker run -d -p 8000:4000 $:latest
原网址,https://blog.csdn.net/alangrady/article/details/108241799 ,感谢原作者。
3. 实践过程
我希望每次发布的时候能保留历史版本,而上面示例只保留唯一最新版本,所以,需要进行一些调整。同时,docker从打包,推送(推送到阿里云仓空或者docker官方仓库,或者其他仓空都行)等流程基于之前k8s的,都已经畅通,所以最终修改完的内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Deploy to server
- name: Deploy to server using ssh key
uses: appleboy/ssh-action@master
with:
host: $
username: $
key: $
port: $
script: |
docker stop $(docker ps --filter name=$ -q)
docker rm -f $(docker ps -a --filter name=$ -q)
docker rmi -f $(docker images $ -q)
docker login --username=$ --password $ registry.cn-shanghai.aliyuncs.com
docker pull $:$
docker run -d --name=$ -p 4000:80 $:$
注:在push images到仓库的时候,我添加了commit作为版本,所以在这里pull image的时候也同样如此,这样在仓库里就有了完整的版本管理。
4. 几个坑
下面这两个坑浪费了好长时间,请务必注意
4.1 private key必须有-----BEGIN OPENSSH PRIVATE KEY-----和-----END OPENSSH PRIVATE KEY-----内容,生成key的方式建议在Linux环境下,通过ssh-keygen -t rsa -C "xxx@xxx.com"进行生成。我用putty在win10下生成的key,通过putty可以登录,通过命令提示行登录总是失败,导致我最初用putty生成的私钥进行测试的时候,ssh一直不通,为此我换了几个ssh的Action,非常浪费时间。
4.2 环境变量的问题,我在/github/workflows/deploy.yml中配置的env在执行Deploy to server的过程中未生效,后来我索性改为secretes方式,然后问题解决。env不生效的原因,猜测是因为登录到了新的服务器中,而不是在Action环境里面。