资讯专栏INFORMATION COLUMN

github上Go项目使用Travis CI和Docker Hub实现持续集成

zeyu / 1017人阅读

摘要:介绍在本文中,我们将介绍如何使用,和创建一个简单的持续集成过程。

介绍

在本文中,我们将介绍如何使用Github,Travis-CI和Docker Hub创建一个简单的持续集成过程。

项目

这次使用的一个项目是自己写的一个爬虫小程序(https://github.com/Han-Ya-Jun...

项目目录

</>复制代码

  1. news_watch_notice
  2. ├── cmd //main
  3. ├── conf
  4. ├── dis
  5. ├── Dockerfile
  6. ├── Makefile
  7. ├── pkg
  8. ├── qrcode
  9. ├── .travis.yml
  10. ├── README.md
  11. ├── vendor
  12. ├── utils
Dockerfile

</>复制代码

  1. FROM alpine:3.6
  2. MAINTAINER hanyajun0123@gmail.com
  3. RUN apk update && apk add curl bash tree tzdata
  4. && cp -r -f /usr/share/zoneinfo/Hongkong /etc/localtime
  5. ADD news_watch_notice /usr/bin/
  6. ADD news_watch_notice.sha /usr/bin/
  7. CMD ["news_watch_notice"]
makefile

</>复制代码

  1. TARGET=news_watch_notice
  2. PKG=$(TARGET)
  3. TAG=latest
  4. IMAGE_PREFIX?=hanyajun
  5. IMAGE_PREFIX_PRD=hanyajun
  6. TARGET_IMAGE_DEV=$(IMAGE_PREFIX)/$(TARGET):$(TAG)
  7. TARGET_IMAGE_PRD=$(IMAGE_PREFIX_PRD)/$(TARGET):$(TAG)
  8. all: image
  9. $(TARGET):
  10. CGO_ENABLED=0 go build -o dist/$(TARGET) $(PKG)/cmd
  11. gitlog:
  12. target:
  13. mkdir -p dist
  14. git log | head -n 1 > dist/news_watch_notice.sha
  15. docker run --rm -i -v `pwd`:/go/src/$(PKG)
  16. -w /go/src/$(PKG) golang:1.11.5
  17. make $(TARGET)
  18. image-dev: target
  19. cd dist && cp ../Dockerfile ./ &&
  20. docker build -t $(TARGET_IMAGE_DEV) .
  21. push-dev:
  22. docker push $(TARGET_IMAGE_DEV)
  23. image-prd: target
  24. cd dist && cp ../Dockerfile ./ &&
  25. docker build -t $(TARGET_IMAGE_PRD) .
  26. push-prd:
  27. docker push $(TARGET_IMAGE_PRD)
  28. clean:
  29. rm -rf dist
  30. .PHONY: image target clean push $(TARGET)
.travis.yml

</>复制代码

  1. language: go
  2. go: # 语言版本号
  3. - "1.11.5" # 默认使用最新版本,注意,需要 "1.10" 版本的时候必须表示为字符串形式,如果写成 1.10 则会使用 1.1 版本;x表示对应前缀的最新版本
  4. services:
  5. - docker #需要的docker环境
  6. install:
  7. - make image-dev #build
  8. script:
  9. - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
  10. - make push-dev # push
travis的配置(https://travis-ci.org) 打开项目ci开关

设置docker hub的用户和密码环境变量(push需要登录认证)

</>复制代码

  1. DOCKER_PASSWORD
  2. DOCKER_USERNAME

提交项目代码触发ci

部分ci日志

</>复制代码

  1. docker_mtu
  2. docker stop/waiting
  3. docker start/running, process 3638
  4. services
  5. 0.02s$ sudo service docker start
  6. start: Job is already running: docker
  7. Updating gimme
  8. git.checkout
  9. 0.85s$ git clone --depth=50 --branch=master https://github.com/Han-Ya-Jun/news_watch_notice.git Han-Ya-Jun/news_watch_notice
  10. Cloning into "Han-Ya-Jun/news_watch_notice"...
  11. $ cd Han-Ya-Jun/news_watch_notice
  12. $ git checkout -qf e05633a1c6e0c3289c85aedf28461b718fe1af13
  13. $ travis_export_go 1.11.5 github.com/Han-Ya-Jun/news_watch_notice
  14. Setting environment variables from repository settings
  15. $ export DOCKER_PASSWORD=[secure]
  16. $ export DOCKER_USERNAME=[secure]
  17. $ export GOBIN=$GOPATH/src/bin
  18. 6.93s$ travis_setup_go
  19. go version go1.11.5 linux/amd64
  20. $ export GOPATH="/home/travis/gopath"
  21. $ export PATH="/home/travis/gopath/bin:/home/travis/.gimme/versions/go1.11.5.linux.amd64/bin:/home/travis/bin:/home/travis/bin:/home/travis/.local/bin:/opt/pyenv/shims:/home/travis/.phpenv/shims:/home/travis/perl5/perlbrew/bin:/home/travis/.nvm/versions/node/v8.9.1/bin:/home/travis/.kiex/elixirs/elixir-1.4.5/bin:/home/travis/.kiex/bin:/home/travis/.rvm/gems/ruby-2.4.1/bin:/home/travis/.rvm/gems/ruby-2.4.1@global/bin:/home/travis/.rvm/rubies/ruby-2.4.1/bin:/home/travis/gopath/bin:/home/travis/.gimme/versions/go1.7.4.linux.amd64/bin:/usr/local/phantomjs/bin:/usr/local/phantomjs:/usr/local/neo4j-3.2.7/bin:/usr/local/maven-3.5.2/bin:/usr/local/cmake-3.9.2/bin:/usr/local/clang-5.0.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/travis/.rvm/bin:/home/travis/.phpenv/bin:/opt/pyenv/bin:/home/travis/.yarn/bin"
  22. $ export GO111MODULE="auto"
  23. $ gimme version
  24. v1.5.3
  25. $ go version
  26. go version go1.11.5 linux/amd64
  27. go.env
  28. $ go env
  29. GOARCH="amd64"
  30. GOBIN="/home/travis/gopath/src/bin"
  31. GOCACHE="/home/travis/.cache/go-build"
  32. GOEXE=""
  33. GOFLAGS=""
  34. GOHOSTARCH="amd64"
  35. GOHOSTOS="linux"
  36. GOOS="linux"
  37. GOPATH="/home/travis/gopath"
  38. GOPROXY=""
  39. GORACE=""
  40. GOROOT="/home/travis/.gimme/versions/go1.11.5.linux.amd64"
  41. GOTMPDIR=""
  42. GOTOOLDIR="/home/travis/.gimme/versions/go1.11.5.linux.amd64/pkg/tool/linux_amd64"
  43. GCCGO="gccgo"
  44. CC="gcc"
  45. CXX="g++"
  46. CGO_ENABLED="1"
  47. GOMOD=""
  48. CGO_CFLAGS="-g -O2"
  49. CGO_CPPFLAGS=""
  50. CGO_CXXFLAGS="-g -O2"
  51. CGO_FFLAGS="-g -O2"
  52. CGO_LDFLAGS="-g -O2"
  53. PKG_CONFIG="pkg-config"
  54. GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build083711362=/tmp/go-build -gno-record-gcc-switches"
  55. install
  56. 43.66s$ make image-dev
  57. mkdir -p dist
  58. git log | head -n 1 > dist/news_watch_notice.sha
  59. docker run --rm -i -v `pwd`:/go/src/news_watch_notice
  60. -w /go/src/news_watch_notice golang:1.11.5
  61. make news_watch_notice
  62. Unable to find image "golang:1.11.5" locally
  63. 1.11.5: Pulling from library/golang
  64. 22dbe790f715: Pulling fs layer
  65. 0250231711a0: Pulling fs layer
  66. 6fba9447437b: Pulling fs layer
  67. c2b4d327b352: Pulling fs layer
  68. 619f4932b7ea: Pulling fs layer
  69. e2fd6cbd3c6f: Pulling fs layer
  70. 1d96446d2b20: Pulling fs layer
  71. c2b4d327b352: Waiting
  72. e2fd6cbd3c6f: Waiting
  73. 1d96446d2b20: Waiting
  74. 619f4932b7ea: Waiting
  75. 6fba9447437b: Verifying Checksum
  76. 6fba9447437b: Download complete
  77. 0250231711a0: Download complete
  78. 22dbe790f715: Verifying Checksum
  79. 22dbe790f715: Download complete
  80. c2b4d327b352: Verifying Checksum
  81. c2b4d327b352: Download complete
  82. 619f4932b7ea: Verifying Checksum
  83. 619f4932b7ea: Download complete
  84. 1d96446d2b20: Verifying Checksum
  85. 1d96446d2b20: Download complete
  86. e2fd6cbd3c6f: Verifying Checksum
  87. e2fd6cbd3c6f: Download complete
  88. 22dbe790f715: Pull complete
  89. 0250231711a0: Pull complete
  90. 6fba9447437b: Pull complete
  91. c2b4d327b352: Pull complete
  92. 619f4932b7ea: Pull complete
  93. e2fd6cbd3c6f: Pull complete
  94. 1d96446d2b20: Pull complete
  95. Digest: sha256:342872745847966ab630e9cc5b6980ed3fe7f4e3ea44b10efac995575730c9b8
  96. Status: Downloaded newer image for golang:1.11.5
  97. CGO_ENABLED=0 go build -o dist/news_watch_notice news_watch_notice/cmd
  98. cd dist && cp ../Dockerfile ./ &&
  99. docker build -t [secure]/news_watch_notice:latest .
  100. Sending build context to Docker daemon 14.78MB
  101. Step 1/6 : FROM alpine:3.6
  102. 3.6: Pulling from library/alpine
  103. 5a3ea8efae5d: Pulling fs layer
  104. 5a3ea8efae5d: Verifying Checksum
  105. 5a3ea8efae5d: Download complete
  106. 5a3ea8efae5d: Pull complete
  107. Digest: sha256:ee0c0e7b6b20b175f5ffb1bbd48b41d94891b0b1074f2721acb008aafdf25417
  108. Status: Downloaded newer image for alpine:3.6
  109. ---> 43773d1dba76
  110. Step 2/6 : MAINTAINER [secure]0123@gmail.com
  111. ---> Running in 1f4d4d0db1cb
  112. ---> 0eadcccd5d22
  113. Removing intermediate container 1f4d4d0db1cb
  114. Step 3/6 : RUN apk update && apk add curl bash tree tzdata && cp -r -f /usr/share/zoneinfo/Hongkong /etc/localtime
  115. ---> Running in 7f859dd06afc
  116. fetch http://dl-cdn.alpinelinux.org/alpine/v3.6/main/x86_64/APKINDEX.tar.gz
  117. fetch http://dl-cdn.alpinelinux.org/alpine/v3.6/community/x86_64/APKINDEX.tar.gz
  118. v3.6.5-39-gbdcdc921e8 [http://dl-cdn.alpinelinux.org/alpine/v3.6/main]
  119. v3.6.5-34-gf0ba0b43d5 [http://dl-cdn.alpinelinux.org/alpine/v3.6/community]
  120. OK: 8442 distinct packages available
  121. (1/11) Installing ncurses-terminfo-base (6.0_p20171125-r1)
  122. (2/11) Installing ncurses-terminfo (6.0_p20171125-r1)
  123. (3/11) Installing ncurses-libs (6.0_p20171125-r1)
  124. (4/11) Installing readline (6.3.008-r5)
  125. (5/11) Installing bash (4.3.48-r1)
  126. Executing bash-4.3.48-r1.post-install
  127. (6/11) Installing ca-certificates (20161130-r2)
  128. (7/11) Installing libssh2 (1.8.2-r0)
  129. (8/11) Installing libcurl (7.61.1-r2)
  130. (9/11) Installing curl (7.61.1-r2)
  131. (10/11) Installing tree (1.7.0-r0)
  132. (11/11) Installing tzdata (2019a-r0)
  133. Executing busybox-1.26.2-r11.trigger
  134. Executing ca-certificates-20161130-r2.trigger
  135. OK: 17 MiB in 24 packages
  136. ---> f923b8dbfbf2
  137. Removing intermediate container 7f859dd06afc
  138. Step 4/6 : ADD news_watch_notice /usr/bin/
  139. ---> a855f5307179
  140. Step 5/6 : ADD news_watch_notice.sha /usr/bin/
  141. ---> 9014ba35ce0f
  142. Step 6/6 : CMD news_watch_notice
  143. ---> Running in 109449b18721
  144. ---> acb6623feb46
  145. Removing intermediate container 109449b18721
  146. Successfully built acb6623feb46
  147. Successfully tagged [secure]/news_watch_notice:latest
  148. 0.49s$ echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
  149. Login Succeeded
  150. The command "echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin" exited with 0.
  151. 5.21s$ make push-dev
  152. docker push [secure]/news_watch_notice:latest
  153. The push refers to a repository [docker.io/[secure]/news_watch_notice]
  154. c0546ad83870: Preparing
  155. 869b27ab7e53: Preparing
  156. 47b50a8202a0: Preparing
  157. 721384ec99e5: Preparing
  158. 721384ec99e5: Layer already exists
  159. c0546ad83870: Pushed
  160. 47b50a8202a0: Pushed
  161. 869b27ab7e53: Pushed
  162. latest: digest: sha256:74a706f3f8b5b2ead4a7722ca72d8f1eaa450801847662402e4e3e34f4d73158 size: 1157
  163. The command "make push-dev" exited with 0.
成功将项目打包成image并推送到docker hub上

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27838.html

相关文章

  • Javascript CI篇(4)- Github + Travis 持续集成

    摘要:简介是目前新兴的开源持续集成构建项目,它与,的很明显的特别在于采用格式,简洁清新独树一帜。目前大多数的项目都已经移入到的构建队列中,据说每天运行超过次完整构建。查看构建情况增加逼格首先要是一个文档。是由提供的真实的构建情况。 Travis简介 Travis CI(continuous integration )是目前新兴的开源持续集成构建项目,它与jenkins,GO的很明显的特别在于...

    pingink 评论0 收藏0
  • 容器环境下的持续集成最佳实践:构建基于 Drone + GitFlow + K8s 的云原生语义化

    摘要:集成测试完成后,由运维同学从发起一个到分支,此时会会运行单元测试,构建镜像,并发布到预发布环境测试人员在预发布环境下再次验证功能,团队做上线前的其他准备工作运维同学合并,将为本次发布的代码及镜像自动打上版本号并书写,同时发布到生产环境。 云原生 (Cloud Native) 是伴随的容器技术发展出现的的一个词,最早出自 Pivotal 公司(即开发了 Spring 的公司)的一本技术小...

    asoren 评论0 收藏0
  • 容器环境下的持续集成最佳实践:构建基于 Drone + GitFlow + K8s 的云原生语义化

    摘要:集成测试完成后,由运维同学从发起一个到分支,此时会会运行单元测试,构建镜像,并发布到预发布环境测试人员在预发布环境下再次验证功能,团队做上线前的其他准备工作运维同学合并,将为本次发布的代码及镜像自动打上版本号并书写,同时发布到生产环境。 云原生 (Cloud Native) 是伴随的容器技术发展出现的的一个词,最早出自 Pivotal 公司(即开发了 Spring 的公司)的一本技术小...

    DevTalking 评论0 收藏0
  • 使用 DaoCloud 与 FIR.im 为 CodingAndroid 项目开启持续集成的尝试

    摘要:所以一直没能把持续集成搞起来。后来接触到,所以尝试了一下把持续集成搭建在上了,通过下面这几步就可以实现项目有新的提交后自己编译发布测试包到上了。 由于本人精力有限,如果内容有更新可能无法及时更新其他渠道的内容,请移步简书 查看文章 由于之前公司项目一直迭代速度很快,几乎隔几天就需要发布测试包给同事们进行测试,所以希望把打包Apk这个工作交给机器来做,然后就尝试了几种持续集成的方案,最常...

    renweihub 评论0 收藏0

发表评论

0条评论

zeyu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<