资讯专栏INFORMATION COLUMN

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

zeyu / 924人阅读

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

介绍

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

项目

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

项目目录
news_watch_notice
├── cmd    //main
├── conf
├── dis
├── Dockerfile
├── Makefile
├── pkg
├── qrcode
├── .travis.yml
├── README.md
├── vendor
├── utils
Dockerfile
FROM alpine:3.6

MAINTAINER hanyajun0123@gmail.com
RUN apk update && apk add curl bash tree tzdata 
    && cp -r -f /usr/share/zoneinfo/Hongkong /etc/localtime
ADD news_watch_notice /usr/bin/
ADD news_watch_notice.sha /usr/bin/
CMD ["news_watch_notice"]
makefile
TARGET=news_watch_notice
PKG=$(TARGET)
TAG=latest
IMAGE_PREFIX?=hanyajun
IMAGE_PREFIX_PRD=hanyajun
TARGET_IMAGE_DEV=$(IMAGE_PREFIX)/$(TARGET):$(TAG)
TARGET_IMAGE_PRD=$(IMAGE_PREFIX_PRD)/$(TARGET):$(TAG)
all: image

$(TARGET):
    CGO_ENABLED=0 go build -o dist/$(TARGET) $(PKG)/cmd

gitlog:


target:
    mkdir -p dist
    git log | head -n 1 > dist/news_watch_notice.sha
    docker run --rm -i -v `pwd`:/go/src/$(PKG) 
      -w /go/src/$(PKG) golang:1.11.5 
      make $(TARGET)

image-dev: target
    cd dist && cp ../Dockerfile ./ && 
    docker build -t $(TARGET_IMAGE_DEV) .

push-dev:
    docker push $(TARGET_IMAGE_DEV)

image-prd: target
    cd dist && cp ../Dockerfile ./ && 
    docker build -t $(TARGET_IMAGE_PRD) .

push-prd:
    docker push $(TARGET_IMAGE_PRD)
clean:
    rm -rf dist

.PHONY: image target clean push $(TARGET)
.travis.yml
language: go
go:          # 语言版本号
  - "1.11.5"   # 默认使用最新版本,注意,需要 "1.10" 版本的时候必须表示为字符串形式,如果写成 1.10 则会使用 1.1 版本;x表示对应前缀的最新版本
services:
  - docker  #需要的docker环境


install:
  - make image-dev  #build

script:
  - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
  - make push-dev  # push
travis的配置(https://travis-ci.org) 打开项目ci开关

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

DOCKER_USERNAME

提交项目代码触发ci

部分ci日志
docker_mtu
docker stop/waiting
docker start/running, process 3638
services
0.02s$ sudo service docker start
start: Job is already running: docker
Updating gimme
git.checkout
0.85s$ git clone --depth=50 --branch=master https://github.com/Han-Ya-Jun/news_watch_notice.git Han-Ya-Jun/news_watch_notice
Cloning into "Han-Ya-Jun/news_watch_notice"...
$ cd Han-Ya-Jun/news_watch_notice
$ git checkout -qf e05633a1c6e0c3289c85aedf28461b718fe1af13
$ travis_export_go 1.11.5 github.com/Han-Ya-Jun/news_watch_notice
Setting environment variables from repository settings
$ export DOCKER_PASSWORD=[secure]
$ export DOCKER_USERNAME=[secure]
$ export GOBIN=$GOPATH/src/bin
6.93s$ travis_setup_go
go version go1.11.5 linux/amd64
$ export GOPATH="/home/travis/gopath"
$ 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"
$ export GO111MODULE="auto"
$ gimme version
v1.5.3
$ go version
go version go1.11.5 linux/amd64
go.env
$ go env
GOARCH="amd64"
GOBIN="/home/travis/gopath/src/bin"
GOCACHE="/home/travis/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/travis/gopath"
GOPROXY=""
GORACE=""
GOROOT="/home/travis/.gimme/versions/go1.11.5.linux.amd64"
GOTMPDIR=""
GOTOOLDIR="/home/travis/.gimme/versions/go1.11.5.linux.amd64/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build083711362=/tmp/go-build -gno-record-gcc-switches"
install
43.66s$ make image-dev
mkdir -p dist
git log | head -n 1 > dist/news_watch_notice.sha
docker run --rm -i -v `pwd`:/go/src/news_watch_notice 
      -w /go/src/news_watch_notice golang:1.11.5 
      make news_watch_notice
Unable to find image "golang:1.11.5" locally
1.11.5: Pulling from library/golang
22dbe790f715: Pulling fs layer
0250231711a0: Pulling fs layer
6fba9447437b: Pulling fs layer
c2b4d327b352: Pulling fs layer
619f4932b7ea: Pulling fs layer
e2fd6cbd3c6f: Pulling fs layer
1d96446d2b20: Pulling fs layer
c2b4d327b352: Waiting
e2fd6cbd3c6f: Waiting
1d96446d2b20: Waiting
619f4932b7ea: Waiting
6fba9447437b: Verifying Checksum
6fba9447437b: Download complete
0250231711a0: Download complete
22dbe790f715: Verifying Checksum
22dbe790f715: Download complete
c2b4d327b352: Verifying Checksum
c2b4d327b352: Download complete
619f4932b7ea: Verifying Checksum
619f4932b7ea: Download complete
1d96446d2b20: Verifying Checksum
1d96446d2b20: Download complete
e2fd6cbd3c6f: Verifying Checksum
e2fd6cbd3c6f: Download complete
22dbe790f715: Pull complete
0250231711a0: Pull complete
6fba9447437b: Pull complete
c2b4d327b352: Pull complete
619f4932b7ea: Pull complete
e2fd6cbd3c6f: Pull complete
1d96446d2b20: Pull complete
Digest: sha256:342872745847966ab630e9cc5b6980ed3fe7f4e3ea44b10efac995575730c9b8
Status: Downloaded newer image for golang:1.11.5
CGO_ENABLED=0 go build -o dist/news_watch_notice news_watch_notice/cmd
cd dist && cp ../Dockerfile ./ && 
    docker build -t [secure]/news_watch_notice:latest .
Sending build context to Docker daemon  14.78MB
Step 1/6 : FROM alpine:3.6
3.6: Pulling from library/alpine
5a3ea8efae5d: Pulling fs layer
5a3ea8efae5d: Verifying Checksum
5a3ea8efae5d: Download complete
5a3ea8efae5d: Pull complete
Digest: sha256:ee0c0e7b6b20b175f5ffb1bbd48b41d94891b0b1074f2721acb008aafdf25417
Status: Downloaded newer image for alpine:3.6
 ---> 43773d1dba76
Step 2/6 : MAINTAINER [secure]0123@gmail.com
 ---> Running in 1f4d4d0db1cb
 ---> 0eadcccd5d22
Removing intermediate container 1f4d4d0db1cb
Step 3/6 : RUN apk update && apk add curl bash tree tzdata     && cp -r -f /usr/share/zoneinfo/Hongkong /etc/localtime
 ---> Running in 7f859dd06afc
fetch http://dl-cdn.alpinelinux.org/alpine/v3.6/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.6/community/x86_64/APKINDEX.tar.gz
v3.6.5-39-gbdcdc921e8 [http://dl-cdn.alpinelinux.org/alpine/v3.6/main]
v3.6.5-34-gf0ba0b43d5 [http://dl-cdn.alpinelinux.org/alpine/v3.6/community]
OK: 8442 distinct packages available
(1/11) Installing ncurses-terminfo-base (6.0_p20171125-r1)
(2/11) Installing ncurses-terminfo (6.0_p20171125-r1)
(3/11) Installing ncurses-libs (6.0_p20171125-r1)
(4/11) Installing readline (6.3.008-r5)
(5/11) Installing bash (4.3.48-r1)
Executing bash-4.3.48-r1.post-install
(6/11) Installing ca-certificates (20161130-r2)
(7/11) Installing libssh2 (1.8.2-r0)
(8/11) Installing libcurl (7.61.1-r2)
(9/11) Installing curl (7.61.1-r2)
(10/11) Installing tree (1.7.0-r0)
(11/11) Installing tzdata (2019a-r0)
Executing busybox-1.26.2-r11.trigger
Executing ca-certificates-20161130-r2.trigger
OK: 17 MiB in 24 packages
 ---> f923b8dbfbf2
Removing intermediate container 7f859dd06afc
Step 4/6 : ADD news_watch_notice /usr/bin/
 ---> a855f5307179
Step 5/6 : ADD news_watch_notice.sha /usr/bin/
 ---> 9014ba35ce0f
Step 6/6 : CMD news_watch_notice
 ---> Running in 109449b18721
 ---> acb6623feb46
Removing intermediate container 109449b18721
Successfully built acb6623feb46
Successfully tagged [secure]/news_watch_notice:latest
0.49s$ echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
Login Succeeded
The command "echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin" exited with 0.
5.21s$ make push-dev
docker push [secure]/news_watch_notice:latest
The push refers to a repository [docker.io/[secure]/news_watch_notice]
c0546ad83870: Preparing
869b27ab7e53: Preparing
47b50a8202a0: Preparing
721384ec99e5: Preparing
721384ec99e5: Layer already exists
c0546ad83870: Pushed
47b50a8202a0: Pushed
869b27ab7e53: Pushed
latest: digest: sha256:74a706f3f8b5b2ead4a7722ca72d8f1eaa450801847662402e4e3e34f4d73158 size: 1157
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元查看
<