赞
踩
最近下班后的练习比较多,而且修改后的东西提交后在阿里云运行。项目的更新比较麻烦。因此,想git push后,优雅的docker run就可以把修改后的项目运行起来。
首先来比较一下:
一、传统的Springboot项目更新方式
1.提交代码:git push
2.打包:maven clean & maven package
3.传输:将maven利用pom.xml配置文件生成的xxx.jar传输到阿里云服务器
4.运行:java -jar xxx.jar运行
而今天记录的教程想要达到的是,提交代码后,只需要在阿里云服务器一行命令运行镜像即可。
1.git push
2.docker run
git push后优雅地docker run需要做什么呢?
首先,你得有pom.xml、Dockerfile和docker仓库。
pom.xml的artificatId和version决定了打包之后的jar文件名。比如我这个就是 demo-0.0.1.jar。
mvn package后jar文件在target目录下,对应的Dockerfile的写法
docker镜像仓库不用多说了,dockerhub或者阿里云镜像仓库都可以。这里我用的是dockerhub,创建一个账号和仓库就好了。
下面开始主要的设置Github Actions操作说明:
1.创建Github Action工作流:github 项目的 Actions > New workflow
2.创建maven.yml文件:找到Java With Maven,点击Set up this workflow来创建yml文件
yml文件的路径默认是 项目根目录/.github/workflows/maven.yml,建议这个yml文件路径不要更改,我一开始就是把它放在了项目根目录Actions在git push后一直无法运作。
3.编辑maven.yml文件,使其符合你的需求。
Github Actions的功能很强大,简而言之,这一步是正确地编写yml文件,使其符合我们自动化部署的需求。
这里我们的需求是什么?一开始我们分析了传统的项目更新方式,使用了maven 打包。这里依然是一样的,并没有高级多少,只是github的服务器按照这个maven.yml执行打包操作罢了。
编写yml使其实现:
1.git push 后 maven 自动打包
2.利用Dockerfile自动制作docker镜像
3.自动推送制作好的docker镜像到镜像仓库
默认的maven.yml只能实现git push后,使用maven打包生成jar文件。要生成镜像并且推送到指定的镜像仓库还得修改,修改编写后的yml文件如下:
- # This workflow will build a Java project with Maven
- # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
-
- name: Java CI with Maven
-
- on:
- push:
- branches: [ master ]
- pull_request:
- branches: [ master ]
-
- jobs:
- build:
-
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/checkout@v2
- - name: Set up JDK 1.8
- uses: actions/setup-java@v1
- with:
- java-version: 1.8
- - name: Build with Maven
- run: mvn -B package --file pom.xml
- - name: BuildDockerImage
- run: docker build . --file Dockerfile --tag my-image-name:$(date +%s)
- - name: Publish to Docker Repository
- uses: elgohr/Publish-Docker-Github-Action@master
- with:
- name: christopherchen/practice:practice
- username: ${{ secrets.DOCKER_USERNAME }}
- password: ${{ secrets.DOCKER_PASSWORD }}
仔细看,与默认的maven.yml相比并没有新增多少东西。
- name: BuildDockerImage
run: docker build . --file Dockerfile --tag my-image-name:$(date +%s)
- name: Publish to Docker Repository
uses: elgohr/Publish-Docker-Github-Action@master
with:
name: christopherchen/practice:practice
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
这里的 -name后面就是一个子任务名称,run后面则是要运行的命令行,在什么环境运行呢?就是上面的 ubuntu-latest。
BuildDockerImage:这一步 使用docker build利用Dockerfile生成docker镜像。
Publish to Docker Repository:这一步将上一步打包生成的docker镜像推送至指定的镜像仓库。
with下面的name是镜像仓库地址,username是镜像仓库登录的用户名,password是镜像仓库登录的密码。由于这些东西是比较隐秘的,这里用了github的secret。
项目的Settings > Secrets > New repository secret 创建密钥。就是类似与键值对,创建后在yml中用 ${{key}}来代替它的value。
完成以上设定就可以了。git push后Actions自动执行workflow工作流,打包镜像推送到docker仓库。
然后在阿里云服务器里,docker login,由于我使用的tagname是practice,因此后面docker pull的时候也是 docker pull 仓库地址:practice。使用 docker pull christopherchen/practice:practice 即可下载到打包好的镜像。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。