/atomci

๐Ÿณ ไธบ**ไผไธš่€Œๆฅ๏ผŒไปฅๅบ”็”จไธบไธญๅฟƒ็š„ไบ‘ๅŽŸ็”Ÿcicdๅนณๅฐ

Primary LanguageGoApache License 2.0Apache-2.0

A+ Release codecov docker_pulls License

ๆ–‡ๆกฃ | ๅœจ็บฟไฝ“้ชŒ | Releases

ไป‹็ป

AtomCI ไธ€ๆฌพไบ‘ๅŽŸ็”ŸCICDๅนณๅฐ๏ผŒ่‡ดๅŠ›ไบŽ่ฎฉไธญๅฐไผไธšๅฟซ้€Ÿ่ฝๅœฐKubernetes๏ผŒๆ”ฏๆŒk8s/reigstry/jenkins/ไปฃ็ ๆบ็š„่ฝปๆพ้›†ๆˆ๏ผŒ้ซ˜ๅนถๅ‘็š„ๆตๆฐด็บฟ๏ผŒไบ‘ๅŽŸ็”Ÿyamlๆ”ฏๆŒ๏ผŒๅคš็Žฏๅขƒ็ตๆดป็ฎก็†๏ผŒๆƒ้™ๆŽงๅˆถ็ญ‰, ไปฃ็ ๅ‡ๅทฒๅผ€ๆบ, ๆ‚จ็š„star ๆ˜ฏๆˆ‘ไปฌๅผ€ๆบ็š„ๅŠจๅŠ›๏ผŒ้žๅธธๆ„Ÿ่ฐข๏ผˆ๏ผš

ไธบไป€ไนˆ้€‰ๆ‹ฉ atomci

  • ๅคšไปฃ็ ๆบ่ฝปๆพ้›†ๆˆ๏ผˆ gitlab/gihub/gitee/gitea/gogs ๏ผ‰
  • ๅผบๅคง็š„ๆœๅŠก้›†ๆˆ๏ผˆไธ่ฎบๆ˜ฏ้˜ฟ้‡Œไบ‘ /่…พ่ฎฏไบ‘๏ผŒ่ฟ˜ๆ˜ฏ่‡ชๅปบ k8s ๏ผ›ไธ็ฎกๆ˜ฏ่‡ชๅปบ harbor ่ฟ˜ๆ˜ฏๅ…ฌๆœ‰้•œๅƒไป“ๅบ“๏ผ›ๅ‡ๅฏไปฅ่ฝปๆพ้›†ๆˆ๏ผ‰
  • ๆตๆฐด็บฟ็ตๆดป่‡ชๅฎšไน‰
  • ๆ”ฏๆŒๅŽŸ็”Ÿ็š„ yaml ๅบ”็”จ็ผ–ๆŽ’
  • ็Žฏๅขƒ็ตๆดปๆ–ฐๅขž /ๅˆ ้™ค
  • ้ƒจ็ฝฒๆ–นๅผ็ฎ€ๅ•
  • ๆ›ดๅคšๆœŸๅพ…ไฝ ็š„ไฝ“้ชŒ...

ๆžถๆž„ๅ›พ

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚         โ”‚
โ”‚ Git Scm โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚         โ”‚      โ”‚      โ”‚ AtomCI                โ”‚    โ”‚          โ”‚   โ”‚                       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜      โ”‚      โ”‚                       โ”‚    โ”‚          โ”‚   โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
                 โ”‚      โ”‚      Frontend (Vue)   โ”‚    โ”‚          โ”‚   โ”‚  โ”‚ jnlp-agent pod1โ”‚   โ”‚
                 โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ–บ                       โ”œโ”€โ”€โ”€โ”€โ–บ          โ”‚   โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”‚      โ”‚                       โ”‚    โ”‚          โ”œโ”€โ”€โ”€โ–บ                       โ”‚
โ”‚          โ”‚     โ”‚      โ”‚      Backend (Go)     โ—„โ”€โ”€โ”€โ”€โ”ค  Jenkins โ”‚   โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚ Registry โ”œโ”€โ”€โ”€โ”€โ”€โ”ค      โ”‚                       โ”‚    โ”‚          โ”‚   โ”‚  โ”‚ jnlp-agent pod2โ”‚   โ”‚
โ”‚          โ”‚     โ”‚      โ”‚                       โ”‚    โ”‚          โ”‚   โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ”‚      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ”‚          โ”‚   โ”‚        ....           โ”‚
                 โ”‚                 โ”‚                 โ”‚          โ”‚   โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”‚      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค   โ”‚  โ”‚ jnlp-agent podnโ”‚   โ”‚
โ”‚           โ”‚    โ”‚      โ”‚                       โ”‚    โ”‚k8s/dockerโ”‚   โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚ Kubernetesโ”‚    โ”‚      โ”‚        MySQL          โ”‚    โ”‚   or     โ”‚   โ”‚                       โ”‚
โ”‚           โ”œโ”€โ”€โ”€โ”€โ”˜      โ”‚                       โ”‚    โ”‚ warfile  โ”‚   โ”‚ agent on kubernetes   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜           โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๅœจ็บฟไฝ“้ชŒ

ๅœจ็บฟไฝ“้ชŒ๏ผŒ ้žๅธธๆ„Ÿ่ฐข@liuzilongๆไพ›็š„kubernetes็Žฏๅขƒ๏ผˆ๏ผš

่ดฆๅท ๅฏ†็ 
atomci 123456

ๆณจ:

  • ไฝ“้ชŒๅธๆˆทไธบๆŽˆๆƒ็”จๆˆท๏ผŒไธๆ˜พ็คบโ€œ็ณป็ปŸ็ฎก็†โ€็š„้…็ฝฎ้กต้ข, ๅฏๆœฌๅœฐๅฎ‰่ฃ…ๅฎŒๆ•ดไฝ“้ชŒใ€‚
  • ๅ› k8s่ต„ๆบๆœ‰้™๏ผŒ้ƒจ็ฝฒ็š„ๆœๅŠกไผšๅฎšๆ—ถๆธ…็†๏ผŒ้ฟๅ…่ต„ๆบ่ฟ‡ๅˆ†ๅ ็”จ

่ง†้ข‘ๆผ”็คบ

  1. ๆฆ‚่ฟฐๅŠๅฆ‚ไฝ•ๅฎ‰่ฃ…้ƒจ็ฝฒ ่ง†้ข‘้“พๆŽฅ
  2. ไป‹็ปๅŠๅฟซ้€Ÿๅผ€ๅง‹ ่ง†้ข‘้“พๆŽฅ
  3. 5ๅˆ†้’Ÿๅ…จๆต็จ‹ไฝ“้ชŒ ่ง†้ข‘้“พๆŽฅ

ๅฟซ้€Ÿๅผ€ๅง‹

ไธ€้”ฎ้ƒจ็ฝฒๆœ€ๆ–ฐ็‰ˆๆœฌ

  1. ๅ‡†ๅค‡ไธ€ๅฐๅฏไปฅๆญฃๅธธ่ฟ่กŒ็š„linuxๆœๅŠกๅ™จ๏ผˆๆ”ฏๆŒMacOS๏ผ‰
  2. ๅฎ‰่ฃ…Docker ๅ’Œ Docker Compose
curl -sSL https://raw.githubusercontent.com/go-atomci/atomci/master/deploy/docker-compose/quick_start.sh | bash

ๅฆ‚ไฝ•ๆœฌๅœฐ่ฟ่กŒ

ๅ‰็ฝฎๆกไปถ

  • go 1.18+
  • node v14.20.0
  • yarn v1.22.5
  • mysql 5.7

ๅˆ›ๅปบๆ•ฐๆฎๅบ“

> create database atomci character set utf8mb4;

ไฟฎๆ”น้…็ฝฎ

# conf/app.conf
[DB]
url = root:root@tcp(127.0.0.1:3306)/atomci?charset=utf8mb4

[notification]
dingEnable = 1 # ๅฏ็”จ้’‰้’‰้€š็Ÿฅ๏ผ›0๏ผšไธๅฏ็”จ๏ผŒ1๏ผšๅฏ็”จ
ding = ้’‰้’‰ๆœบๅ™จไบบ

mailEnable = 1 # ๅฏ็”จ้‚ฎไปถ้€š็Ÿฅ๏ผ›0๏ผšไธๅฏ็”จ๏ผŒ1๏ผšๅฏ็”จ
smtpHost = SMTPๆœๅŠกๅ™จ
smtpPort = 465
smtpAccount = ้‚ฎไปถ่ดฆๅท
smtpPassword = ้‚ฎไปถๅฏ†็ 

ๆณจ: ๅฏนไบŽ[ldap],[jwt], [atomci]ๅฏไปฅๅ‚็…ง้™„ๅฝ•-ใ€Ž้…็ฝฎ่ฏดๆ˜Žใ€่ฟ›่กŒไฟฎๆ”น

ๅฏๅŠจๅŽ็ซฏ

# linux/mac็Žฏๅขƒ
$ make run  

# windowns็Žฏๅขƒ๏ผŒๆˆ–ๆ˜ฏๆฒกๆœ‰makeๅ‘ฝไปค
$ go build -o atomci  cmd/atomci/main.go; ./atomci

ๅฏๅŠจๅ‰็ซฏ

$ cd web
# ๅฎ‰่ฃ…ไพ่ต–
$ yarn install  #ไป…้ฆ–ๆฌก่ฟ่กŒๆ—ถ้œ€่ฆๆ‰ง่กŒ  
# ่ฟ่กŒ
$ yarn run dev

่ฎฟ้—ฎ

# ้ป˜่ฎค็”จๆˆทๅ/ๅฏ†็  admin/123456
http://your-ip:8081

ๅฆ‚ไฝ•ๆž„ๅปบ้•œๅƒ

ๅ‰็ซฏ

$ cd web
$ pwd
# ./atomci/web/
$ cd web ; docker build . 

ๅŽ็ซฏ

$ pwd
# ./atomci
$ docker build .

ๅฆ‚ๆžœไฝ ไฝฟ็”จ docker-compsoeๆ–นๅผ้ƒจ็ฝฒ็š„่ฏ๏ผŒๅฏไปฅ้€š่ฟ‡ๆ›ฟๆข้•œๅƒๅœฐๅ€็š„ๆ–นๅผ๏ผŒๅณๅฏไฝฟ็”จmasterๅˆ†ๆ”ฏ็š„ๆœ€ๆ–ฐไปฃ็ ๏ผŽ

่ดก็Œฎไปฃ็ 

ๅฏๆŸฅ้˜…AtomCI็š„้กน็›ฎ่ฎกๅˆ’๏ผŒๅœจๅฏนๅบ”issuesไธญๅ›žๅค่ฎค้ข†๏ผŒๆˆ–่€…็›ดๆŽฅๆไบคPR๏ผŒๆ„Ÿ่ฐขไฝ ๅฏนAtomCI็š„่ดก็Œฎ
่ดก็ŒฎๅŒ…ๆ‹ฌไฝ†ไธ้™ไบŽไปฅไธ‹ๆ–นๅผ๏ผš

  • ๅธฎๅŠฉๆ–‡ๆกฃ
  • Bugไฟฎๅค
  • ๆ–ฐๅŠŸ่ƒฝๆไบค
  • ไปฃ็ ไผ˜ๅŒ–
  • ๆต‹่ฏ•็”จไพ‹ๅฎŒๅ–„

่ฏทๅ‚้˜…Contribution Guide ่Žทๅ–ๆ›ดๅคš็š„ไฟกๆฏ๏ผŽ

ไบ’ๅŠจไบคๆต

AtomCIๅผ€ๅ‘่€…


ๅทฒ็Ÿฅ้—ฎ้ข˜

Issuesๆ˜ฏๆœฌ้กน็›ฎๅ”ฏไธ€็š„ๆฒŸ้€šๆธ ้“๏ผŒๅฆ‚ๆžœๅœจไฝฟ็”จ่ฟ‡็จ‹ไธญ้‡ๅˆฐ้—ฎ้ข˜๏ผŒ่ฏทๅ…ˆๆŸฅ้˜…ๆ–‡ๆกฃ๏ผŒๅฆ‚ๆžœไปๆ— ๆณ•่งฃๅ†ณ๏ผŒ่ฏทๆŸฅ็œ‹็›ธๅ…ณๆ—ฅๅฟ—๏ผŒไฟๅญ˜ๆˆชๅ›พไฟกๆฏ๏ผŒ็ป™ๆˆ‘ไปฌๆไบค issue๏ผŒๆˆ‘ไปฌไผšๅŠๆ—ถๆ ‡่ฎฐใ€ไฟฎๅคใ€‚

AtomCI ๅ› ไฝ ่€Œๅ˜ใ€‚


AtomCI ็”จๆˆทไบคๆต็พค

ๅฏๆทปๅŠ  ๅพฎไฟกWechat ้‚€่ฏทๅ…ฅ็พค

้™„ๅฝ•

้…็ฝฎ่ฏดๆ˜Ž

้…็ฝฎ้กน ้ป˜่ฎคๅ€ผ ่ฏดๆ˜Ž
default::appname atomci ๅบ”็”จๅ
default::httpport 8080 ๅบ”็”จไพฆๅฌ็ซฏๅฃ
default::runmode dev ่ฟ่กŒๆจกๅผdev|prod
default::copyrequestbody true ๆ˜ฏๅฆๅ…่ฎธๅœจ HTTP ่ฏทๆฑ‚ๆ—ถ๏ผŒ่ฟ”ๅ›žๅŽŸๅง‹่ฏทๆฑ‚ไฝ“ๆ•ฐๆฎๅญ—่Š‚
ๆ—ฅๅฟ—้…็ฝฎ
log::logfile log/atomci.log ๆ—ฅๅฟ—ๆ–‡ไปถ
log::level 7 ๆ—ฅๅฟ—็บงๅˆซ
log::separate ["error"] ๅˆ†้š”error็‹ฌ็ซ‹ไธ€ไธชๆ–‡ไปถ, ้ป˜่ฎคๆ˜ฏatomci.error.log
DB้…็ฝฎไฟกๆฏ
DB::url root:root@tcp(127.0.0.1:3306)/atomci?charset=utf8mb4 ๆ•ฐๆฎๅบ“็š„้“พๆŽฅไฟกๆฏ
DB::debug false ๆ˜ฏๅฆๅผ€ๅฏdebug
DB::rowsLimit 5000
DB::maxIdelConns 100
DB::maxOpenConns 200
LDAP ้…็ฝฎไฟกๆฏ
ldap::host ldap.xxx.com
ldap::port 389
ldap::bindDN ldap@xx.com
ldap::bindPassword Xxx..,
ldap::userFilter (samaccountname=%s)
ldap::baseDN OU=Xxx,DC=xx,DC=com
JWT ้…็ฝฎ
jwt::secret changemeforsecurity jwt็š„ๅŠ ๅฏ†ไฝฟ็”จ็š„ๅญ—ๆฎต๏ผŒๅปบ่ฎฎไฟฎๆ”น

atomci::url http://localhost:8080 AtomCI ๅ›ž่ฐƒๅœฐๅ€