精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Github Actions 還能做這些事

開發 后端
最近公司內部項目的發布流程接入了 GitHub Actions,整個體驗過程還是比較美好的;本文主要目的是對于沒有還接觸過 GitHub Actions的新手,能夠利用它快速構建自動測試及打包推送 Docker 鏡像等自動化流程。

[[389725]]

本文轉載自微信公眾號「crossoverJie」,作者crossoverJie。轉載本文請聯系crossoverJie公眾號。

前言

最近公司內部項目的發布流程接入了 GitHub Actions,整個體驗過程還是比較美好的;本文主要目的是對于沒有還接觸過 GitHub Actions的新手,能夠利用它快速構建自動測試及打包推送 Docker 鏡像等自動化流程。

創建項目

本文主要以 Go 語言為例,當然其他語言也是類似的,與語言本身關系不大。

這里我們首先在 GitHub 上創建一個項目,編寫了幾段簡單的代碼 main.go:

  1. var version = "0.0.1" 
  2.  
  3. func GetVersion() string { 
  4.  return version 
  5.  
  6. func main() { 
  7.  fmt.Println(GetVersion()) 

內容非常簡單,只是打印了了版本號;同時配套了一個單元測試 main_test.go:

  1. func TestGetVersion1(t *testing.T) { 
  2.  tests := []struct { 
  3.   name string 
  4.   want string 
  5.  }{ 
  6.   {name"test1", want: "0.0.1"}, 
  7.  } 
  8.  for _, tt := range tests { 
  9.   t.Run(tt.name, func(t *testing.T) { 
  10.    if got := GetVersion(); got != tt.want { 
  11.     t.Errorf("GetVersion() = %v, want %v", got, tt.want) 
  12.    } 
  13.   }) 
  14.  } 

我們可以執行 go test 運行該單元測試。

  1. $ go test                           
  2. PASS 
  3. ok      github.com/crossoverJie/go-docker       1.729s 

自動測試

當然以上流程完全可以利用 Actions 自動化搞定。

首選我們需要在項目根路徑創建一個 .github/workflows/*.yml 的配置文件,新增如下內容:

  1. name: go-docker 
  2. on: push 
  3. jobs: 
  4.   test: 
  5.     runs-on: ubuntu-latest 
  6.     if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags'
  7.     steps: 
  8.       - uses: actions/checkout@v2 
  9.       - name: Run Unit Tests 
  10.         run: go test 

簡單解釋下:

  • name 不必多說,是為當前工作流創建一個名詞。
  • on 指在什么事件下觸發,這里指代碼發生 push 時觸發,更多事件定義可以參考官方文檔:

Events that trigger workflows

  • jobs 則是定義任務,這里只有一個名為 test 的任務。

該任務是運行在 ubuntu-latest 的環境下,只有在 main 分支有推送或是有 tag 推送時運行。

運行時會使用 actions/checkout@v2 這個由他人封裝好的 Action,當然這里使用的是由官方提供的拉取代碼 Action。

  • 基于這個邏輯,我們可以靈活的分享和使用他人的 Action 來簡化流程,這點也是 GitHub Action擴展性非常強的地方。

最后的 run 則是運行自己命令,這里自然就是觸發單元測試了。

  • 如果是 Java 便可改為 mvn test.

之后一旦我們在 main 分支上推送代碼,或者有其他分支的代碼合并過來時都會自動運行單元測試,非常方便。

 

與我們本地運行效果一致。

自動發布

接下來考慮自動打包 Docker 鏡像,同時上傳到 Docker Hub;為此首先創建 Dockerfile :

  1. FROM golang:1.15 AS builder 
  2. ARG VERSION=0.0.10 
  3. WORKDIR /go/src/app 
  4. COPY main.go . 
  5. RUN go build -o main -ldflags="-X 'main.version=${VERSION}'" main.go 
  6.  
  7. FROM debian:stable-slim 
  8. COPY --from=builder /go/src/app/main /go/bin/main 
  9. ENV PATH="/go/bin:${PATH}" 
  10. CMD ["main"

這里利用 ldflags 可在編譯期間將一些參數傳遞進打包程序中,比如打包時間、go 版本、git 版本等。

這里只是將 VERSION 傳入了 main.version 變量中,這樣在運行時就便能取到了。

  1. docker build -t go-docker:last . 
  2. docker run --rm go-docker:0.0.10 
  3. 0.0.10 

接著繼續編寫 docker.yml 新增自動打包 Docker 以及推送到 docker hub 中。

  1. deploy: 
  2.     runs-on: ubuntu-latest 
  3.     needs: test 
  4.     if: startsWith(github.ref, 'refs/tags'
  5.     steps: 
  6.       - name: Extract Version 
  7.         id: version_step 
  8.         run: | 
  9.           echo "##[set-output name=version;]VERSION=${GITHUB_REF#$"refs/tags/v"}" 
  10.           echo "##[set-output name=version_tag;]$GITHUB_REPOSITORY:${GITHUB_REF#$"refs/tags/v"}" 
  11.           echo "##[set-output name=latest_tag;]$GITHUB_REPOSITORY:latest" 
  12.  
  13.       - nameSet up QEMU 
  14.         uses: docker/setup-qemu-action@v1 
  15.  
  16.       - nameSet up Docker Buildx 
  17.         uses: docker/setup-buildx-action@v1 
  18.  
  19.       - name: Login to DockerHub 
  20.         uses: docker/login-action@v1 
  21.         with
  22.           username: ${{ secrets.DOCKER_USER_NAME }} 
  23.           password: ${{ secrets.DOCKER_ACCESS_TOKEN }} 
  24.  
  25.       - name: PrepareReg Names 
  26.         id: read-docker-image-identifiers 
  27.         run: | 
  28.           echo VERSION_TAG=$(echo ${{ steps.version_step.outputs.version_tag }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV 
  29.           echo LASTEST_TAG=$(echo ${{ steps.version_step.outputs.latest_tag  }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV 
  30.  
  31.       - name: Build and push Docker images 
  32.         id: docker_build 
  33.         uses: docker/build-push-action@v2.3.0 
  34.         with
  35.           push: true 
  36.           tags: | 
  37.             ${{env.VERSION_TAG}} 
  38.             ${{env.LASTEST_TAG}} 
  39.           build-args: | 
  40.             ${{steps.version_step.outputs.version}} 

新增了一個 deploy 的 job。

  1. needs: test 
  2.  if: startsWith(github.ref, 'refs/tags'

運行的條件是上一步的單測流程跑通,同時有新的 tag 生成時才會觸發后續的 steps。

name: Login to DockerHub

在這一步中我們需要登錄到 DockerHub,所以首先需要在 GitHub 項目中配置 hub 的 user_name 以及 access_token.

 

配置好后便能在 action 中使用該變量了。

 

這里使用的是由 docker 官方提供的登錄 action(docker/login-action)。

有一點要非常注意,我們需要將鏡像名稱改為小寫,不然會上傳失敗,比如我的名稱中 J 字母是大寫的,直接上傳時就會報錯。

 

所以在上傳之前先要執行該步驟轉換為小寫。

 

最后再用這兩個變量上傳到 Docker Hub。

 

今后只要我們打上 tag 時,Action 就會自動執行單測、構建、上傳的流程。

總結

GitHub Actions 非常靈活,你所需要的大部分功能都能在 marketplace找到現成的直接使用,

比如可以利用 ssh 登錄自己的服務器,執行一些命令或腳本,這樣想象空間就很大了。

使用起來就像是搭積木一樣,可以很靈活的完成自己的需求。

參考鏈接:

How to Build a CI/CD Pipeline with Go, GitHub Actions and Docker

責任編輯:武曉燕 來源: crossoverJie
相關推薦

2022-12-21 08:20:01

2020-12-04 10:42:54

GithubSSDNode.js

2021-05-13 21:21:50

React應用GitHub

2021-10-15 10:39:43

RabbitMQ隊列延遲

2024-12-02 07:00:00

特性標記軟件開發Action

2021-01-18 18:30:49

服務器開發工具

2021-10-03 14:47:26

Fedora CoreGitHub Acti運行器

2021-01-19 05:26:22

Github ActiJenkinsDevOps

2024-02-20 08:08:43

2015-11-23 09:50:17

大數據

2017-03-07 11:45:57

DevOps容器

2019-11-26 08:00:00

GitHubGitHub ActiAzure

2021-04-20 09:36:49

黑客網絡安全網絡攻擊

2024-01-24 18:50:21

WebFTP服務器

2022-05-27 08:55:15

工具自動化軟件

2022-11-15 17:07:40

開發自動化前端

2019-05-25 14:58:06

車載微信微信語音交互

2022-08-09 08:00:00

服務網格云原生工具

2021-01-15 08:52:09

GitHub GitHubActio博文發布

2021-12-30 19:34:15

Java泛型JDK
點贊
收藏

51CTO技術棧公眾號

成人免费网址| 国产一区二区三区四区五区六区| 一区二区www| 牛牛影视久久网| 亚洲欧洲99久久| dy888夜精品国产专区| 欧美另类视频在线观看| 亚欧日韩另类中文欧美| 欧美三区在线观看| 日本一区二区在线视频| 一级黄色片视频| 亚洲国产美女| 日韩在线视频网| 四虎永久免费观看| 成人视屏在线观看| 亚洲精品精品亚洲| 五月天亚洲精品| 亚洲国产精品字幕| 欧美 日韩 国产精品| 色视频在线看| 午夜亚洲性色视频| 久久久国产精品视频| 日本道中文字幕| 黄色欧美视频| 精品久久久中文| 久久久久网址| 凹凸精品一区二区三区| 在线观看不卡| 日韩成人在线观看| 91看片就是不一样| 成人在线高清视频| aa级大片欧美| 2014亚洲精品| 亚洲天堂自拍偷拍| 久久天堂精品| 2019国产精品自在线拍国产不卡| 成人免费无码大片a毛片| 日本久久二区| 91福利在线导航| 亚洲国产精品久久久久婷蜜芽| 无码国产色欲xxxx视频| 国产麻豆日韩欧美久久| 欧美日韩第一页| 蜜桃av.com| 亚洲午夜精品久久久久久浪潮| wwwav国产| 国产一区二区三区探花| 国产亚洲一区字幕| 久久网站最新地址| 午夜免费在线观看精品视频| 97香蕉碰碰人妻国产欧美| avtt久久| 欧美狂野另类xxxxoooo| 亚洲老女人av| 国产美女福利在线观看| 亚洲欧美成aⅴ人在线观看| 亚洲成人18| yw193.com尤物在线| 久久久久久9999| 欧美精品与人动性物交免费看| 中文无码av一区二区三区| 另类天堂av| 欧美做受高潮电影o| 午夜影院在线看| 国产日韩1区| 欧美综合国产精品久久丁香| 西西444www无码大胆| 米奇777超碰欧美日韩亚洲| 日韩精品日韩在线观看| 一区二区三区少妇| 粉嫩一区二区三区在线观看| 欧美久久久一区| 手机在线国产视频| 成人动漫视频在线观看| 亚洲欧洲高清| 91麻豆国产在线观看| 裸模一区二区三区免费| 牛牛影视精品影视| 国产欧美久久久精品影院| 5g国产欧美日韩视频| 国产一级淫片a视频免费观看| 欧美~级网站不卡| 久久97久久97精品免视看 | 老司机免费视频久久| 欧美在线观看一区二区三区| 日韩手机在线视频| 免费观看在线色综合| 成人女保姆的销魂服务| 亚洲精品综合网| 久久久久国产精品麻豆| 国产精品青青草| 国产色在线视频| av毛片久久久久**hd| 日本不卡在线播放| 精品176二区| 五月激情六月综合| 无需播放器的av| 亚洲午夜免费| 一本色道久久综合狠狠躁篇的优点 | 日本精品国产| 亚洲电影成人av99爱色| 欧美大波大乳巨大乳| 亚洲国产一成人久久精品| 97视频在线播放| 91免费视频播放| 99久久99久久免费精品蜜臀| 亚洲va久久久噜噜噜久久狠狠| 欧美孕妇性xxxⅹ精品hd| 国产精品久久久久桃色tv| 久久精品xxx| 精品免费av一区二区三区| 日韩欧美色电影| 免费黄色片网站| 亚洲精品国产偷自在线观看| 欧美成人精品三级在线观看| 黄色片视频免费| 青娱乐精品在线视频| 痴汉一区二区三区| 1024国产在线| 亚洲欧美日本在线| 久久精品视频91| 精品人人人人| 亚洲日韩欧美视频| 中国特级黄色片| 精品久久久久久无码人妻| 91探花在线观看| 欧美电影一区二区| 亚洲精品乱码久久久久久9色| 国产一级成人av| 久久久精品国产亚洲| 在线永久看片免费的视频| 成人午夜免费av| 青青视频免费在线| 成人全视频在线观看在线播放高清 | 国产精品一区二区果冻传媒| 日韩av电影在线观看| 麻豆免费在线| 欧美videos大乳护士334| 激情无码人妻又粗又大| 日韩精品电影在线| 玛丽玛丽电影原版免费观看1977 | 日本一区二区三区四区| 亚洲熟妇无码一区二区三区| 日本99精品| 亚洲视频一区二区三区| 五月婷婷亚洲综合| av不卡在线播放| 国产毛片视频网站| www.久久草.com| 最近日韩中文字幕中文| 中文字幕av资源| 国产欧美日韩在线视频| 能看的毛片网站| 欧美欧美在线| 久久97精品久久久久久久不卡| 免费的毛片视频| 久久亚洲一级片| 精品一卡二卡三卡| 影视先锋久久| 老司机午夜精品99久久| 欧美激情啊啊啊| www视频在线| 亚洲在线免费播放| 午夜视频在线瓜伦| h视频久久久| 久久人人看视频| 手机看片国产1024| 欧美性猛交xxxx乱大交3| 国产精品999.| 狠狠爱www人成狠狠爱综合网 | 欧美男男gaygay1069| 日韩一区二区三区在线播放| 久久久久久久久久久久久久av| 国内精品伊人久久久久av影院| 久久99精品久久久久久秒播放器| 亚洲精品一线| 亚洲电影免费观看高清完整版在线| 精品少妇一区二区三区密爱| 国产在线国偷精品免费看| 日本男女交配视频| 在线高清欧美| 午夜精品一区二区三区在线视| 精品久久久无码中文字幕| 亚洲国产欧美日韩另类综合| 9.1成人看片免费版| 亚洲第一黄网| 日韩精品资源| 久久久成人av毛片免费观看| 久久精品一本久久99精品| 久久精品.com| 日韩大胆人体| 久久视频国产精品免费视频在线| 成 人 黄 色 小说网站 s色| 香蕉久久网站| 国产伦精品一区二区三区| 免费观看欧美大片| 日韩视频在线免费| 日本黄色免费视频| 欧美亚洲一区三区| 久久久久黄色片| 国产日韩欧美精品一区| 中文字幕无码不卡免费视频| 国产精品久久久久久影院8一贰佰 国产精品久久久久久麻豆一区软件 | 亚洲欧美一二三区| √…a在线天堂一区| 国内外成人免费在线视频| 欧美日韩国产在线一区| 成人久久久久久| 18video性欧美19sex高清| 在线观看欧美日韩| 少妇人妻精品一区二区三区| 欧美日韩一区高清| 中文字幕乱码av| 国产999精品久久| 超碰超碰在线观看| 一区二区影院| 三级三级久久三级久久18| 亚洲天堂电影网| 欧美爱爱视频| 天天成人综合网| 美足av综合网| 亚洲成色999久久网站| 中文字幕在线2019| 狠狠做深爱婷婷久久综合一区| 最近中文字幕免费视频| 国产a精品视频| www.午夜av| 美女高潮久久久| 欧美自拍小视频| 免费永久网站黄欧美| 国产精品国产对白熟妇| 亚洲一区在线| 性欧美18一19内谢| 久久中文字幕二区| 亚洲精品国产精品久久| 久久最新网址| 亚洲a成v人在线观看| 黄色在线观看www| 欧美第一淫aaasss性| 欧美色视频免费| 亚洲激情小视频| 人妻偷人精品一区二区三区| 日韩一区二区三区四区| 99riav国产| 欧美一区二区三区在线观看 | 国外成人在线直播| h视频在线免费| 一区二区三区回区在观看免费视频| 99国产精品久久久久久久成人| 精品美女久久久久久免费| 久久亚洲AV无码| 亚洲综合色婷婷| 国产在线视频99| 午夜精品成人在线视频| 日韩av综合在线| 欧美日韩精品二区| 高清乱码免费看污| 91黄色免费看| 在线观看毛片视频| 欧美日韩成人激情| 欧美激情综合亚洲一二区| 欧美男人天堂网| 欧美在线小视频| 在线免费看毛片| 欧美福利视频一区| 国产av一区二区三区| 欧洲精品一区二区| 日本一二三区不卡| 最近中文字幕一区二区三区| 极品美妇后花庭翘臀娇吟小说| 337p粉嫩大胆噜噜噜噜噜91av| 97超碰人人看| 成人国产一区二区三区精品| 亚洲成av人片在线观看无| 91色porny| 99在线视频免费| 91免费小视频| 一级特黄曰皮片视频| 亚洲欧洲日韩综合一区二区| 好吊色视频在线观看| 亚洲a一区二区| 波多野结衣日韩| 91精品国产91综合久久蜜臀| 免费av一级片| 亚洲欧美一区二区三区四区| 午夜激情在线观看| 九九久久国产精品| 麻豆视频在线看| 国产精品一二三在线| 日产精品一区| 亚洲综合在线小说| 日本一区二区乱| 91免费看片网站| 亚洲毛片免费看| 日本一本草久p| 日韩中文字幕一区二区三区| 神马久久午夜| 国产精品久久久| 精品中文字幕一区二区三区四区| 国产精品一区免费在线观看| www.com黄色片| 国产成人8x视频一区二区| 三区视频在线观看| 国产综合久久久久久鬼色| 少妇精品无码一区二区三区| 成人91在线观看| 男人晚上看的视频| 欧美三级欧美成人高清www| a级片在线免费看| 亚洲三级免费看| 成全电影大全在线观看| 国产精品中文久久久久久久| 精品亚洲免a| 人人妻人人澡人人爽精品欧美一区 | 亚洲大片精品永久免费| 懂色av.com| 欧美一级高清片| 日批视频在线播放| 大量国产精品视频| 91tv亚洲精品香蕉国产一区| 国产精品果冻传媒潘| 国产欧美日韩三区| 精品视频一区二区不卡| 亚洲产国偷v产偷v自拍涩爱| 中文字幕亚洲欧美在线| 在线毛片观看| 国产精品久久久对白| 亚洲免费福利一区| 久艹在线免费观看| 国产一区999| 欧美日韩黄色一区二区| 国产精品爽爽久久久久久| 精品在线欧美视频| 波多一区二区| 99理论电影网| 美女视频亚洲色图| 黄色片免费在线观看视频| 久久99久久99精品免视看婷婷| 中文字幕人妻熟女在线| 亚洲欧美日韩人成在线播放| 在线观看免费视频一区| 在线精品播放av| 在线看欧美视频| 亚洲成人av动漫| 久久99久久99精品免视看婷婷| 亚州av综合色区无码一区| 一区二区三区日韩在线观看| 国产白浆在线观看| 欧美成人免费网| 亚洲精品一区二区三区在线| 欧美亚洲另类在线一区二区三区| 91精品国产乱码久久久久久久| 老太脱裤让老头玩ⅹxxxx| 国产a区久久久| 日韩手机在线观看| 亚洲精品视频在线播放| 在线精品亚洲欧美日韩国产| 欧美日韩在线观看一区二区三区| 天堂地址在线www| 国产一区二区三区18| 成人看片毛片免费播放器| 永久免费精品视频网站| 亚洲国产婷婷| 久久久久成人精品无码中文字幕| ㊣最新国产の精品bt伙计久久| 中文人妻av久久人妻18| 在线观看日韩欧美| 女海盗2成人h版中文字幕| 欧美高清视频一区二区三区在线观看| 一区二区不卡| 国产精品熟妇一区二区三区四区 | 九色porny丨首页入口在线| 久久偷看各类wc女厕嘘嘘偷窃| 午夜视频精品| 午夜男人的天堂| 在线视频亚洲一区| 久久五月精品| 国产麻豆一区二区三区在线观看| 91精品一区二区三区综合| 乱码一区二区三区| 一区二区三区美女| 国产强被迫伦姧在线观看无码| 最近2019中文字幕mv免费看 | 欧美日韩hd| 久久偷拍免费视频| 欧美日韩视频在线第一区| 福利在线播放| 7777精品伊久久久大香线蕉语言| 97久久夜色精品国产| 日本一区二区免费视频| 亚洲综合网站在线观看| 欧美色图另类| caoporn国产精品免费公开| 国产精品www994| 99久久精品免费视频| 精品久久一区二区三区| 97成人超碰| 手机福利在线视频| 97久久精品人人做人人爽| 国产精品亚洲lv粉色|